2 votes

Ajouter des guillemets à des mots à l'aide de regex en Python

J'essaie de remplacer chaque mot d'une phrase par le même mot mais entre guillemets (par mot, j'entends juste des lettres, pas de chiffres) en utilisant des expressions rationnelles.

Par exemple 4 python code doit être converti en 4 "python" "code" .

Mais ce code produit un résultat erroné

>>> import re
>>> s = "4 python code"
>>> re.sub(r'([a-z]*)', r'"\1"', s)
'""4"" "python" "code"'

Des idées ?

3voto

Jared Points 6403

Changement,

re.sub(r'([a-z]*)', r'"\1"', s)

à

re.sub(r'([a-z]+)', r'"\1"', s)

2voto

sberry Points 28742

En fonction du nombre de fois où vous exécuterez cette opération, et de l'importance des performances, vous pouvez envisager de compiler vos expressions rationnelles. Vous pouvez également vouloir \w au lieu de [a-z] si vous voulez des bouchons - ou vous pouvez utiliser [a-zA-Z] .

>>> replacer = re.compile("(\w+)")
>>> replacer.sub(r'"\1"', "4 python code")
'"4" "python" "code"'

0voto

monkut Points 14549

Une autre façon de procéder sans utiliser re .

s = "4 python code"
new = " ".join([item if item.isdigit() else '"{}"'.format(item) for item in s.split()])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X