2017-03-22 6 views
0

Wie lautet die Regex-Syntax zum Kombinieren von 2 Ausdrücken wie einem Venn-Diagramm?Konzentrische Übereinstimmungen mit einem Ausdruck

Ich habe HTML mit 2 Tabellenzellen. Jede der zwei Zellen enthält mehrere Tabellenzeilen:

https://regex101.com/r/cTXwrT/3

Dieser Ausdruck fängt die zweite Tabellenzelle nur:

(?<=your mother)(?s).*(?=Monochrome)

Dieser Ausdruck passt Tabellenzeilen aus allen Tabellenzellen:

[A-Za-z].*Yoghurt

Wie kombiniere ich beide expres in eins, sodass ich die Tabellenzeilen nur aus der 2. Tabellenzelle bekomme?

Ich schreibe in AutoHotkey, die PCRE für die Regex-Engine verwendet.

Ich entschuldige mich für die schlechte Terminologie- Ich habe gelesen auf Rekursion, zurück Referenzieren, erfassen Gruppen, Atomgruppen, etc, aber sie schienen nicht zutreffen.

Antwort

1

Ich denke, dass Sie mit einer verschachtelten Erfassungsgruppe tun können, was Sie wollen. Hier habe ich erfassen alles zwischen den td-Tags in einer inneren Erfassungsgruppe:

(?<=your mother)(?s).*((?<=\<td bgcolor="#F0F0F0"\>).*(?=\<\/td\>)).*(?=Monochrome) 

Möglicherweise müssen Sie es ein bisschen zwicken, es ist eine ziemlich lückenhaft regex, aber es funktioniert für den aktuellen Anwendungsfall.

die Dokumentation für AutoHotkey#RegExMatch Lesen:

FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1]) 

Falls die Erfassung Subpattern vorhanden sind innen NeedleRegEx, ihre Spiele werden in einem pseudo-Array, dessen Basisname ist OutputVar gespeichert. Wenn der Name der Variablen beispielsweise Match lautet, wird der Teilstring, der mit dem ersten Teilmuster übereinstimmt, in Match1 gespeichert, der zweite Teil wird in Match2 gespeichert und so weiter. Die Ausnahme hiervon sind benannte Submuster: Sie werden nach Namen statt nach Nummer gespeichert. Zum Beispiel würde der Teilstring, der dem benannten Teilmuster "(? P \ d {4})" entspricht, in MatchYear gespeichert werden. Wenn ein bestimmtes Untermuster nicht übereinstimmt (oder wenn die Funktion null zurückgibt), wird die entsprechende Variable leer gelassen.

So würden Sie es mit UnQuotedOutputVar nennen müssen, sagen Match, und suchen Sie dann in Match2 für das, was durch die zweite Erfassungsgruppe gefangen genommen wurde.

+0

Prost! Das hat mich definitiv weiter gebracht und mir ein paar Ideen gegeben. – Ron

Verwandte Themen