Ich versuche, Zeilen aus einer HTML-Tabelle zu analysieren, mit Zellen spezifische Werte mit regulären Ausdrücken in Python enthalten. Mein Ziel in diesem (konstruierten) Beispiel ist es, die Zeilen mit "Kuh" zu bekommen.Komplexe nicht gieriger Matching mit regulären Ausdrücken
import re
response = '''
<tr class="someClass"><td></td><td>chicken</td></tr>
<tr class="someClass"><td></td><td>chicken</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
'''
r = re.compile(r'<tr.*?cow.*?tr>', re.DOTALL)
for m in r.finditer(response):
print m.group(0), "\n"
Meine Ausgabe ist
<tr class="someClass"><td></td><td>chicken</td></tr> <tr class="someClass"><td></td><td>chicken</td></tr> <tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
Während mein Ziel zu bekommen, ist
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
verstehe ich, dass die nicht-gierig? funktioniert in diesem Fall nicht, weil Backtracking funktioniert. Ich habe mit negativen Look Behinds und Lookahead herumgespielt, kann es aber nicht zum Laufen bringen.
Hat jemand Vorschläge?
Ich bin mir dessen bewusst Lösungen wie schöne Suppe, usw., aber die Frage ist, über reguläre Ausdrücke zu verstehen, das Problem nicht per se.
Um Anliegen der Menschen ansprechen über keine regulären Ausdrücke für HTML verwenden. Das allgemeine Problem, das ich will nur mit regulären Ausdrücken lösen, ist aus
response = '''0randomstuffA1randomstuff10randomstuffA2randomstuff10randomstuffB3randomstuff10randomstuffB4randomstuff10randomstuffB5randomstuff1'''
dem Ausgang
0randomstuffB3randomstuff1
0randomstuffB4randomstuff1
0randomstuffB5randomstuff1
und randomstuff sollte als zufällige Zeichenfolge zu bekommen interpretiert werden (aber mit 0 oder 1 nicht).
Wenn Ihre Frage nicht über HTML ist, sollten Sie vielleicht nicht HTML Beispiele hierfür sind –
ein besonderer Grund zur Verwendung von re.DOTALL hier (sie sollen nicht mit regulärem Ausdruck analysiert werden)? –
Das re.DOTALL wurde für das eigentliche Problem benötigt. – user2940666