2010-06-08 6 views
6

Cela devrait être facile, mais j'ai réussi à percer 2 personnes jusqu'ici au travail & Je suis là depuis plus de 3 heures maintenant, alors voilà.Correspondant à un + dans une regex

J'ai besoin de remplacer un + avec aplus (avec quelques autres cas) avec le module re Python. par ex. "J'ai passé mon examen a +." doit devenir "j'ai passé mon examen aplus". Le simple fait d'utiliser \ ba + fonctionne très bien la plupart du temps, mais échoue dans le cas de a + b, donc je ne peux pas l'utiliser, il doit correspondre à un + comme un mot distinct. J'ai essayé \ ba + \ b mais cela échoue parce que je suppose que le + est une limite de mot.

J'ai aussi essayé \ ba + \ W qui fonctionne, mais est gourmand et mange de l'espace (ou tout autre caractère non-alpha qui serait là).

Des suggestions s'il vous plaît?

+0

Correction sur l'expression régulière: J'échappais au +, juste tapé le mauvais. Donc c'était \ ba \ +, \ ba \ + \ b, etc. – dochead

+1

cette information appartient à la question, ne pas commenter. – SilentGhost

Répondre

8

Transformez ce \W en une assertion.

\ba\+(?=\W) 

ou, mieux,

\ba\+(?!\w) 

depuis l'affirmation négative permet de faire correspondre la a+ à la fin de la chaîne aussi.

+0

Merci, ça marche super – dochead

1
>>> re.sub(r'\ba\+\s', 'aplus ', 'I passed my a+ exam.') 
'I passed my aplus exam.' 
>>> re.sub(r'\ba\+\s', 'aplus ', 'a+b') 
'a+b' 
0

Vous devez échapper le + car il a une signification particulière dans regexp (un ou plusieurs a). recherche a\+ au lieu de a+

Questions connexes