Recherche d'une expression régulière comprenant des caractères alphanumériques + “& amp;” et “;”
Question
Voici le problème:
split=re.compile('\\W*')
Cette expression régulière fonctionne bien avec les mots normaux, mais j’ai parfois besoin que cette expression inclue des mots tels que k & amp; auml; ytt & amp; auml; j & amp; aml; auml;
.
Que dois-je ajouter à la regex pour inclure les caractères & amp;
et ;
?
La solution
Vous voulez probablement prendre le problème à l'envers, c'est-à-dire trouver tout le caractère sans les espaces:
[^ \t\n]*
Ou vous voulez ajouter les caractères supplémentaires:
[a-zA-Z0-9&;]*
Si vous souhaitez faire correspondre les entités HTML, essayez quelque chose comme:
(\w+|&\w+;)*
Autres conseils
Je traiterais les entités comme une unité (puisqu'elles peuvent également contenir des codes de caractères numériques), ce qui donne l'expression régulière suivante:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
Ceci correspond à
- soit un caractère de mot (y compris & # 8220;
_
& # 8221;), ou - une entité HTML composée de
- le caractère & # 8220;
& amp;
& # 8221 ;,- le caractère & # 8220;
#
& # 8221 ;,- le caractère & # 8220;
x
& # 8221; suivi d'au moins un chiffre hexadécimal ou - au moins un chiffre décimal ou
- le caractère & # 8220;
- au moins une lettre (= entité nommée),
- le caractère & # 8220;
- un point-virgule
- le caractère & # 8220;
- au moins une fois.
/ EDIT: Merci à & # 932; & # 918; & # 937; & # 932; & # 918; & # 921; & # 927; & # 933; pour avoir signalé une erreur.
vous devriez créer une classe de caractères qui inclurait les caractères supplémentaires. Par exemple:
split=re.compile('[\w&;]+')
Cela devrait faire l'affaire. Pour votre information
-
\ w
('w' en minuscule) correspond aux caractères du mot (alphanumérique) -
\ W
(W majuscule) est une classe de caractères inversée (ce qui signifie qu'elle correspond à tout caractère non alphanumérique) -
*
correspond à 0 fois ou plus et+
à une ou plusieurs fois, donc*
correspond à tout (même s'il n'y a pas de caractères là).
On dirait que ça a fait l'affaire:
split = re.compile ('(\\ W + & amp; \\ W +;) *')
Merci pour les suggestions. La plupart d’entre eux ont bien fonctionné avec Reggy, mais je ne comprends pas très bien pourquoi ils ont échoué avec re.compile.