Al tratar de extraer el título de una página HTML que siempre he utilizado la siguiente expresión regular:Python mirada detrás de expresiones regulares requiere patrón fijo de ancho
(?<=<title.*>)([\s\S]*)(?=</title>)
que extraerá todo entre las etiquetas en un documento y ignorar las etiquetas ellos mismos. Sin embargo, cuando se trata de usar esta expresión regular en Python se plantea la siguiente excepción:
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
El código que estoy utilizando es:
pattern = re.compile('(?<=<title.*>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
si hago algunos ajustes mínimos funciona:
pattern = re.compile('(?<=<title>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
Esto, sin embargo, no tendrá en cuenta los posibles títulos html que por alguna razón tienen atributos o similar.
¿Alguien sabe una buena solución para este problema? Cualquier consejo es apreciado.
¿Hay alguna razón por la cual tiene que ser una aserción de ancho cero? ¿Podrías usar un grupo que no captura? –
Aunque no debería usar expresiones regulares para procesar HTML. ¿Por qué usas look-arounds para nada y no algo así como '