Hangi Regex işaretten bir satırın sonuna kadar her şeyi yakalar?


123

Tek bir ile açıklamaları gösteren bir metin dosyam var '.

Bazı satırların iki tırnak işareti var ama her şeyi a'nın ilk örneğinden 've satır beslemesinden almam gerekiyor .

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

Yanıtlar:


171
'.*

Multiline seçeneğine ihtiyacın olduğuna inanıyorum.


3
Bu, karakterin ilk örneğini ve son satırın sonunu yakalayacaktır
killdaclick

90

Uygun normal ifade, 'char ve ardından herhangi bir sayıda karakterin [sıfır karakter dahil] bir dize / satır belirtecinin sonu ile bitmesi olabilir:

'.*$

Ve 'karakterden sonraki her şeyi yakalamak istiyor ancak çıktıya dahil etmek istemiyorsanız, şunu kullanmalısınız:

(?<=').*$

Bu temelde bana 'karakterini satırın sonuna kadar izleyen tüm karakterleri ver' diyor.

Düzenleme : $ 'ın. * Kullanırken örtük olduğu ve bu nedenle kesinlikle gerekli olmadığı, bu nedenle desen:

'.* 

teknik olarak doğrudur, ancak spesifik olmak ve daha sonraki kod bakımı için karışıklıktan kaçınmak daha açıktır, dolayısıyla $ 'ı kullanıyorum. İnanıyorum ki, açıklığın sorgulanabileceği durumlarda örtük davranışa güvenmektense açık davranış beyan etmenin her zaman daha iyidir.


1
$ Gereksizdir. Nokta, normal şartlar altında satırın sonunda duracaktır.
Tomalak

7
gereksiz - ama yapmak istediği şeye uygun. Daha sonra, 'çizginin sonuna kadar
gnarf

@balabaster: Yanlış olduğunu söylemedim. ;-) Sadece bir dipnottu.
Tomalak

@Tomalak: Herhangi bir şekilde yanıldığınızı ima etmeye çalışmıyordum, sadece $ kullanmak yerine tercihim için gerekçemi açıklığa kavuşturmaktı. Bu konuya işaret ettiğiniz için teşekkür ederiz.
BenAlabaster

Her zaman dahil etmek yerine, söz konusu karakterden sonra her şeyin nasıl ekleneceğini eklemek için +1.
grizzasd

22
'.*$

Tek tırnakla ( ') başlayarak , satırın sonuna .( *) kadar herhangi bir karakteri ( ) sıfır veya daha fazla kez ( ) eşleştirin $.


Bu cevap, ne komutun ardındaki mantığın nasıl yıkılacağına dair harika bir örnek, güzel ve net!
Timmah

12

Windows'ta (Notepad ++) '. *' I denediğimde, ilk satırın sonuna kadar her şeyle eşleşirdi.

O satırın sonuna kadar her şeyi yakalamak için şunu yazdım:

'.*?\n

Bu, yalnızca 'satırın sonuna kadar her şeyi yakalayacaktır.


6

Örneğinizde şu kalıbı tercih ederim:

'([^\n]+)$

tüm oluşumlarla eşleştirmek için çok satırlı ve genel seçenekleri kullanın.

Satır beslemesini maça dahil etmek için şunları kullanabilirsiniz:

'[^\n]+\n

Ancak satır beslemesi yoksa bu, son satırı kaçırabilir.

Tek bir satır için, satır beslemeyle eşleştirmeniz gerekmiyorsa, kullanmayı tercih ederim:

'[^$]+$

4

Bu, 'geri referans 1'e kadar her şeyi ve geri referans 2'de' sonrasındaki her şeyi yakalayacaktır. Dile bağlı olsa da kesme işaretlerinden kaçmanız gerekebilir (\ ')

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

Hızlı değişiklik: Satırda '- geri referans 1 yoksa yine de tüm satırı yakalamalıdır.

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

0

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

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

Eminim bu işe yarıyor, kötü yapılandırılmış metin çok satırlı feryatta de hexa dizisini yakalayacaktır.

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

Ben regex'te ebedi bir acemiyim ama bunu açıklamaya çalışacağım

(\ w * (Hex): w *): Dizenin "Hex:" içerdiği satırdaki metni bulun

(. *?) Bu, yakalanan ikinci metindir ve sonraki her şey

(? = | $) = ile | arasındaki boşluk olan bir sınır oluşturun

Yani ikinci grupla, değere sahip olacaksınız


Soru bu değil, değil mi?
Daniel E.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.