Beim Versuch, den Titel einer HTML-Seite zu extrahiert Ich habe immer die folgende regex verwendet:Python Regex Blick hinter erfordert festes Breite Muster
(?<=<title.*>)([\s\S]*)(?=</title>)
, die alles zwischen den Tags in einem Dokument extrahieren und Ignoriere die Tags selbst. Wenn jedoch diese Regex in Python zu verwenden versucht, stellt sich die folgende Ausnahme:
Traceback (most recent call last):
File "test.py", line 21, in <module>
pattern = re.compile('(?<=<title.*>)([\s\S]*)(?=</title>)')
File "C:\Python31\lib\re.py", line 205, in compile
return _compile(pattern, flags)
File "C:\Python31\lib\re.py", line 273, in _compile
p = sre_compile.compile(pattern, flags) File
"C:\Python31\lib\sre_compile.py", line 495, in compile
code = _code(p, flags) File "C:\Python31\lib\sre_compile.py", line 480, in _code
_compile(code, p.data, flags) File "C:\Python31\lib\sre_compile.py", line 115, in _compile
raise error("look-behind requires fixed-width pattern")
sre_constants.error: look-behind requires fixed-width pattern
Der Code ich verwende ist:
pattern = re.compile('(?<=<title.*>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
, wenn ich einige minimale Anpassungen machen es funktioniert:
pattern = re.compile('(?<=<title>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
Dies berücksichtigt jedoch nicht mögliche HTML-Titel, die aus irgendeinem Grund Attribute oder ähnliches haben.
Wer weiß eine gute Abhilfe für dieses Problem? Irgendwelche Tipps werden geschätzt.
Gibt es einen Grund, warum es eine Assertion mit der Breite null sein muss? Könnten Sie einfach eine nicht einfangende Gruppe verwenden? –
Obwohl Sie keine regulären Ausdrücke verwenden sollten, um HTML zu verarbeiten. Warum benutzen Sie überhaupt Umschau und nicht so etwas wie '