Buscando una expresión regular que incluya alfanumérico + “& amp;” y “;”
Pregunta
Aquí está el problema:
split=re.compile('\\W*')
Esta expresión regular funciona bien cuando se trata de palabras regulares, pero hay ocasiones en las que necesito que la expresión incluya palabras como k & amp; amum; att & amp; auml; j & amp; aml; auml; .
¿Qué debo agregar a la expresión regular para incluir los caracteres & amp;
y ;
?
Solución
Es probable que desee resolver el problema a la inversa, es decir, encontrar todos los caracteres sin espacios:
[^ \t\n]*
O quieres agregar los caracteres adicionales:
[a-zA-Z0-9&;]*
En caso de que quieras unir entidades HTML, deberías intentar algo como:
(\w+|&\w+;)*
Otros consejos
Yo trataría a las entidades como una unidad (ya que también pueden contener códigos de caracteres numéricos), dando como resultado la siguiente expresión regular:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
Esto coincide
- ya sea un carácter de palabra (incluido "
_
"), o - una entidad HTML que consiste en
- el carácter “
& amp;
”,- el carácter "
#
",- el carácter "
x
" seguido de al menos un dígito hexadecimal, o - al menos un dígito decimal, o
- el carácter "
- al menos una letra (= entidad nombrada),
- el carácter "
- un punto y coma
- el carácter “
- al menos una vez.
/ EDIT: Gracias a por señalar un error.
debes hacer una clase de caracteres que incluya los caracteres adicionales. Por ejemplo:
split=re.compile('[\w&;]+')
Esto debería hacer el truco. Para su información
-
\ w
(minúscula 'w') coincide con los caracteres de las palabras (alfanuméricos) -
\ W
(mayúscula) es una clase de caracteres negada (lo que significa que coincide con cualquier carácter no alfanumérico) -
*
coincide con 0 o más veces y+
coincide una o más veces, por lo que*
coincidirá con cualquier cosa (incluso si no hay caracteres allí).
Parece que esto hizo el truco:
split = re.compile ('(\\ W + & amp; \\ W +;) *')
Gracias por las sugerencias. La mayoría de ellos funcionaron bien en Reggy, pero no entiendo muy bien por qué fallaron con re.compile.