Regex apa yang akan menangkap segala sesuatu mulai dari 'mark hingga akhir baris?

123

Saya memiliki file teks yang menunjukkan komentar dengan satu '.

Beberapa baris memiliki dua tanda kutip tetapi saya perlu mendapatkan semuanya dari contoh pertama 'dan umpan baris.

I AL01                  ' A-LINE                            '091398 GDK 33394178    
         402922 0831850 '                                   '091398 GDK 33394179    
I AL02                  ' A-LINE                            '091398 GDK 33394180    
         400722 0833118 '                                   '091398 GDK 33394181    
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182    
         395335 0832203 '                                  '  53198 DJ  33394183    
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418
pengguna38349
sumber

Jawaban:

171
'.*

Saya yakin Anda membutuhkan opsi, Multiline.

Joshua Belden
sumber
3
Ini akan menangkap contoh pertama karakter 'dan akhir baris terakhir
killdaclick
90

Regex yang sesuai adalah 'char yang diikuti dengan sejumlah karakter apa pun [termasuk karakter nol] yang diakhiri dengan tanda akhir string / baris:

'.*$

Dan jika Anda ingin menangkap semuanya setelah 'char tetapi tidak memasukkannya ke dalam output, Anda akan menggunakan:

(?<=').*$

Ini pada dasarnya mengatakan beri saya semua karakter yang mengikuti 'karakter sampai akhir baris.

Edit : Telah dicatat bahwa $ implisit saat menggunakan. * Dan oleh karena itu tidak diperlukan secara ketat, oleh karena itu polanya:

'.* 

secara teknis benar, namun lebih jelas untuk lebih spesifik dan menghindari kebingungan untuk pemeliharaan kode nanti, oleh karena itu saya menggunakan $. Ini adalah keyakinan saya bahwa selalu lebih baik untuk menyatakan perilaku eksplisit daripada mengandalkan perilaku implisit dalam situasi di mana kejelasan dapat dipertanyakan.

BenAlabaster
sumber
1
$ Tidak perlu. Titik tersebut akan berhenti di ujung garis dalam keadaan normal.
Tomalak
7
tidak perlu - tetapi tepat untuk apa yang ingin dia lakukan. Ini berfungsi sebagai pengingat nanti bahwa ia mengharapkan segalanya dari 'hingga akhir baris
gnarf
@ balabaster: Saya tidak mengatakan bahwa itu salah. ;-) Itu hanya catatan kaki.
Tomalak
@Tomalak: Tidak mencoba menyiratkan bahwa Anda salah dengan cara apa pun, kami hanya mengklarifikasi alasan saya untuk pilihan saya menggunakan $ daripada tidak. terimakasih telah menunjukkan itu.
BenAlabaster
+1 untuk menyertakan cara memasukkan semuanya setelah karakter yang dimaksud, daripada selalu menyertakannya.
grizzasd
22
'.*$

Dimulai dengan satu tanda kutip ( '), cocokkan karakter apa pun ( .) nol kali atau lebih ( *) hingga akhir baris ( $).

Gene Gotimer
sumber
Jawaban ini adalah contoh yang bagus tentang bagaimana memecah logika di balik perintah apa, bagus dan jelas!
Timmah
12

Ketika saya mencoba '. * Di windows (Notepad ++) itu akan cocok dengan semuanya setelah pertama' sampai akhir baris terakhir.

Untuk menangkap semuanya sampai akhir baris itu saya mengetik yang berikut:

'.*?\n

Ini hanya akan menangkap semuanya dari 'sampai akhir baris itu.

Orang Denmark
sumber
6

Dalam contoh Anda, saya akan menggunakan pola berikut:

'([^\n]+)$

gunakan opsi multiline dan global untuk mencocokkan semua kejadian.

Untuk memasukkan linefeed dalam pertandingan, Anda bisa menggunakan:

'[^\n]+\n

Tapi ini mungkin melewatkan baris terakhir jika tidak memiliki linefeed.

Untuk satu baris, jika Anda tidak perlu mencocokkan linefeed, saya lebih suka menggunakan:

'[^$]+$
Gess
sumber
4

Ini akan menangkap semuanya hingga 'di referensi latar 1 - dan semuanya setelah' di referensi belakang 2. Anda mungkin perlu keluar dari apostrof meskipun bergantung pada bahasa (\ ')

/^([^']*)'?(.*)$/

Modifikasi cepat: jika baris tidak memiliki '- backreference 1 tetap harus menangkap keseluruhan baris.

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string
gnarf
sumber
0

https://regex101.com/r/Jjc2xR/1

/(\w*\(Hex\): w*)(.*?)(?= |$)/gm

Saya yakin yang ini berfungsi, ini akan menangkap serial de hexa dalam teks berstruktur buruk yang beraneka ragam di bawah

     Space Reservation: disabled
         Serial Number: wCVt1]IlvQWv
   Serial Number (Hex): 77435674315d496c76515776
               Comment: new comment

Saya seorang pemula abadi di regex tapi saya akan mencoba menjelaskan yang ini

(\ w * (Hex): w *): Temukan teks di baris di mana string berisi "Hex:"

(. *?) Ini adalah teks yang diambil kedua dan berarti segalanya setelahnya

(? = | $) buat batas yaitu spasi antara = dan |

Jadi dengan kelompok kedua, Anda akan mendapatkan nilainya

Xavius ​​Pupuss
sumber
Bukan itu pertanyaannya, bukan?
Daniel E.