Barre oblique dans une regex Python
Je suis en train d'utiliser un Python regex pour trouver une expression mathématique dans une chaîne de caractères. Le problème est que la barre oblique semble faire quelque chose d'inattendu. J'aurais pensé que [\w\d\s+-/*]*
serait travailler pour trouver des expressions mathématiques, mais il trouve des virgules trop pour une raison quelconque. Un peu d'expérimentation révèle que les barres obliques sont les coupables. Par exemple:
>>> import re
>>> re.sub(r'[/]*', 'a', 'bcd')
'abacada'
Apparemment obliques match entre les personnages (même quand il est dans une classe de caractères, si seulement lorsque l'astérisque est présent). Des barres obliques inverses ne pas leur échapper. J'ai chassé pendant un certain temps et pas trouvé aucune documentation sur elle. Les pointeurs?
source d'informationauteur exupero
Vous devez vous connecter pour publier un commentaire.
Look ici pour la documentation sur Python
re
module.Je pense que ce n'est pas la
/
mais plutôt la-
dans votre premier personnage classe:[+-/]
correspond+
/
et toute valeur ASCII entre, ce qui arrive à inclure la virgule.Peut-être que cet indicateur à partir de la documentation de l'aide:
Que vous dites pour remplacer zéro ou plusieurs barres obliques avec
'a'
. Afin de ne remplacer chaque "pas de caractère de" avec'a'
. 🙂Vous signifiait probablement
[/]+
c'est à dire une ou plusieurs barres obliques.EDIT: Lire Bre de réponse pour une solution au problème initial. Je n'ai pas lu l'ensemble de la question assez attentivement.
r' [/]* " signifie "correspond à 0 ou plus de l'avant-slash". Il y a exactement 0 de l'avant-barres obliques entre " b "& " c "et entre" c "& "d". Par conséquent, ces matchs sont remplacés par "a".
La
*
correspond à son argument zéro ou plusieurs fois, et donc correspond à la chaîne vide. La chaîne vide est (logiquement) entre deux caractères consécutifs. DoncComme pour la barre oblique, on ne reçoit pas de traitement spécial:
La la documentation décrit la syntaxe des expressions régulières en Python. Comme vous pouvez le voir, la barre oblique n'a pas de fonction particulière.
La raison que
[\w\d\s+-/*]*
trouve aussi des virgules, c'est parce qu'à l'intérieur des crochets le tableau de bord-
désigne un gamme. Dans ce cas, vous ne voulez pas tous les caractères entre+
et/
mais les caractères+
-
et/
. Afin d'écrire le tableau de bord comme le dernier caractère:[\w\d\s+/*-]*
. Cela devrait résoudre le problème.