Procurando por uma expressão regular incluindo alfanumérico + “&” e “;”
Pergunta
Aqui está o problema:
split=re.compile('\\W*')
Esta expressão regular funciona bem quando se trata de palavras regulares, mas há ocasiões em que preciso a expressão para incluir palavras como käyttäj&aml;auml;
.
O que devo adicionar à regex para incluir os caracteres &
e ;
?
Solução
Você provavelmente vai querer levar o problema inverso, ou seja, encontrar todas as características sem espaços:
[^ \t\n]*
Ou você deseja adicionar os caracteres extras:
[a-zA-Z0-9&;]*
No caso de você quiser combinar entidades HTML, você deve tentar algo como:
(\w+|&\w+;)*
Outras dicas
Eu trataria as entidades como uma unidade (uma vez que eles também podem conter códigos de caracteres numéricos), resultando na seguinte expressão regular:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
Este partidas
- um caractere de palavra (incluindo “
_
”), ou - uma entidade HTML consistindo de
- o caractere “
&
”,- o caractere “
#
”,- o caractere “
x
” seguido por pelo menos um dígito hexadecimal, ou - pelo menos um dígito decimal, ou
- o caractere “
- pelo menos uma letra (= entidade nomeada),
- o caractere “
- um ponto e vírgula
- o caractere “
- pelo menos uma vez.
/ EDIT:. Graças a ??O????? por apontar um erro
você deve fazer uma classe de caracteres que incluem os caracteres extras. Por exemplo:
split=re.compile('[\w&;]+')
Isso deve fazer o truque. Para sua informação
-
\w
(minúsculas 'w') coincide com caracteres de texto (alfanumérico) -
\W
(W de capital) é uma classe de caracteres negada (o que significa que corresponde a qualquer caractere não-alfanumérico) -
*
casa 0 ou mais vezes e+
corresponde uma ou mais vezes, por isso*
irá corresponder a qualquer coisa (mesmo se não há caracteres lá).
Parece que este fez o truque:
= dividida re.compile ( '(\\ W + & \\ W +;) *')
Obrigado pelas sugestões. A maioria deles funcionou muito bem no Reggy, mas eu não entendo muito bem por que eles falharam com re.compile.