Recherche d'une expression régulière comprenant des caractères alphanumériques + “& amp;” et “;”

StackOverflow https://stackoverflow.com/questions/152218

  •  02-07-2019
  •  | 
  •  

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 ; ?

Était-ce utile?

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
      • au moins une lettre (= entité nommée),
    • un point-virgule
  • 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top