cómo ignorar los caracteres especiales cuando se usa el límite de palabras

s = '!sopa !sop !sopaa !sopii' 

¡Cómo ignorar ! cuando se usa el límite de la palabra

 re.sub(r'\b\!sop\b', 'sopa', s) 

Salida: '!sopa !sop !sopaa !sopii'

Related of "cómo ignorar los caracteres especiales cuando se usa el límite de palabras"

Parece que quieres algo como esto.

 >>> s = '!sopa !sop !sopaa !sopii' >>> re.sub(r'\B!sop\b', 'sopa', s) '!sopa sopa !sopaa !sopii' 

Tu expresión regular fallará porque no hay un \b realidad sale antes ! símbolo. Es decir, de lo anterior estás tratando de igualar el ! símbolo solo si está precedido por un carácter que no es una palabra. \b coincide entre una palabra char y un carácter que no es de palabra, viceversa. \B coincide entre dos palabras y dos caracteres sin palabras. Aquí \B es exactamente existe entre un espacio y ! , ya que ambos son caracteres que no son palabras.

 (?:^|(?<= ))!sop\b 

Simplemente puedes usar esto. Ver demo.

https://regex101.com/r/bW3aR1/12#python

re.sub(r'(?:^|(?<= ))!sop\b', 'sopa', s)

Para uso dynamic de cuerdas.

 replace = 'sop' s = '!sopa !sop !sopaa !sopii' print re.sub(r"(?:^|(?<= ))!" +replace +r"\b", "new", s) 

Busque caracteres no alfanuméricos y reemplace por espacio:

 re.sub('\W+',' ',s) 

‘sopa sop sopaa sopii’