Quando si cerca di estrarre il titolo di una pagina HTML Ho sempre usato la seguente espressione regolare:Python regex look-dietro richiede schema fisso-larghezza
(?<=<title.*>)([\s\S]*)(?=</title>)
Quale estrarrà tutto tra i tag in un documento e ignorare i tag stessi. Tuttavia, quando si cerca di utilizzare questa regex in Python solleva la seguente eccezione:
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
Il codice che sto usando è:
pattern = re.compile('(?<=<title.*>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
se faccio alcune modifiche minime funziona:
pattern = re.compile('(?<=<title>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
Questo, tuttavia, non terrà conto di potenziali titoli html che per qualche motivo hanno attributi o simili.
Qualcuno sa una buona soluzione per questo problema? Qualsiasi consiglio è apprezzato.
C'è qualche ragione deve essere un'asserzione di larghezza zero? Potresti semplicemente usare un gruppo non catturante? –
Sebbene non si debbano utilizzare espressioni regolari per elaborare l'HTML. Perché non usi affatto lo sguardo in giro e non qualcosa come '