2010-06-08 15 views
6

Esto debería ser fácil, pero he logrado llevar a 2 personas hasta ahora en el trabajo & He estado en ello durante más de 3 horas, así que aquí va.Coincidencia de un + en una expresión regular

Necesito reemplazar un + con un aplus (junto con algunos otros casos) con el módulo Python re. por ej. "Aprobé mi examen de a +". necesita convertirse en "Pasé mi examen de aplus".

El solo uso de \ ba + funciona bien la mayor parte del tiempo, pero falla en el caso de a + b, por lo que no puedo usarlo, debe coincidir con un + como una palabra distinta. He intentado \ ba + \ b pero eso falla porque supongo que el + es un límite de palabras.

También he intentado \ ba + \ W que funciona, pero es codicioso y se come el espacio (o cualquier otro carácter no alfa que estaría allí).

¿Alguna sugerencia por favor?

+0

Corrección en la expresión regular: estaba escapando del +, simplemente lo escribí mal. Así que fue \ ba \ +, \ ba \ + \ b, etc. – dochead

+1

esta información pertenece a la pregunta, no para comentar. – SilentGhost

Respuesta

8

Convierte ese \W en una aserción.

\ba\+(?=\W) 

o, mejor,

\ba\+(?!\w) 

desde la afirmación negativa permite que coincide con el a+ al final de la cadena también.

+0

Gracias, funciona muy bien – 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

Necesita escaparse del + ya que tiene un significado especial en regexp (una o más a). búsqueda a\+ en lugar de a+

Cuestiones relacionadas