2017-01-23 3 views
0

Ich habe versucht, beim Überspringen eines Musters zwischen Zeilen übereinzustimmen. Ich verwende die re.DOTALL Regex-Flagge.Übereinstimmung zwischen Zeilen beim Überspringen von Mustern mit Regex

Was ich extrahieren müssen, ist

CHINTHAPUDI<br/> 
CHINTHAPUDI<br/> 

zwischen Kurfürsten Name und Name des Vaters.

Was ich zur Zeit habe aufbrachten ist diese regex:

(?:^Elector\'s Name:.*?<br/>)(.*?)^(?:Husband|Father) 

Aber es stimmt mit den anderen Elector's Name Linien unter dem ersten Spiel.

Link to my regex101

Hier ist das Dokument, aus der i übereinstimmen soll:

Elector's Name: ANANTH CHINTAPUDI<br/> 
Elector's Name: THIRUPATHI <br/> 
Elector's Name: SRINIVASH <br/> 
CHINTHAPUDI<br/> 
CHINTHAPUDI<br/> 
Father's Name: POSHANNA <br/> 
Father's Name: SHANKAR <br/> 
Father's Name: SHANKAR <br/> 
CHINTAPUDDI<br/> 
CHINTHAPUDI<br/> 
CHINTHAPUDI<br/> 

Wie kann ich mich über die letzten Elector's Name bis Father's Name passend?

+2

ziemlich einfach, wenn Sie die mehrzeilige-Qualifikation entfernen, und die Anforderung, dass die Linien vor mit 'Kurfürsten Name' und' Father' beginnen - keine Zeit, mit ihm zu spielen haben mehr diese Kriterien zu halten. https://regex101.com/r/jbbnWD/3 – Gerrit0

+0

Wow! Danke vielmals! Du könntest es als Antwort schreiben, damit ich es annehmen kann :) – MetalloyD

Antwort

0

Hier ist eine Option, die für die vorgesehenen Eingabe funktioniert:

(?:Elector\'s Name:.*?<br/>\r?\n)+(.*?)(?:Husband|Father)

Es ist ein potenzielles Problem, dass Sie, wenn Sie diese verwenden, zu berücksichtigen sind: Wenn ein Elector's Name früher im Dokument angezeigt wird, wird der erste Satz verwendet werden. Siehe demo.

Zusätzlich, wie Ihre Regex-Versuch erforderlich, dass Elector's Name und Husband oder Father am Anfang der Zeile sein, ist hier eine Version, die diese Anforderung erfüllt. Wenn möglich, würde ich dies vermeiden, da dies zu einer viel langsameren (30x) Prüfung führt.

(?:\r?\nElector\'s Name:.*?<br/>)+\r?\n(.*?)\r?\n(?=Husband|Father)

Verwandte Themen