Solución:
Usar re.escape
>>> import re
>>> re.escape(r' a.*$')
'\\\ a\.\*\$'
>>> print(re.escape(r' a.*$'))
\ a.*$
>>> re.escape('www.stackoverflow.com')
'www\.stackoverflow\.com'
>>> print(re.escape('www.stackoverflow.com'))
www.stackoverflow.com
Repitiéndolo aquí:
re.escape (cadena)
Devuelve la cadena con todos los caracteres no alfanuméricos con barra invertida; esto es útil si desea hacer coincidir una cadena literal arbitraria que puede tener metacaracteres de expresión regular.
A partir de Python 3.7 re.escape()
se cambió para escapar solo de los caracteres que son significativos para las operaciones de expresiones regulares.
Me sorprende que nadie haya mencionado el uso de expresiones regulares a través de re.sub()
:
import re
print re.sub(r'(["])', r'\1', 'it's "this"') # it's "this"
print re.sub(r"(['])", r'\1', 'it's "this"') # it's "this"
print re.sub(r'([" '])', r'\1', 'it's "this"') # it's "this"
Cosas importantes a tener en cuenta:
- En el buscar patrón, incluir
así como los personajes que estás buscando. Vas a estar usando
para escapar de tus personajes, por lo que necesitas escapar
ese así como. - Ponga paréntesis alrededor del buscar patrón, por ejemplo
(["])
, de manera que la sustitución
patrón puede usar el carácter encontrado cuando agregaen frente de eso. (Eso es lo que
1
hace: usa el valor del primer grupo entre paréntesis.) - los
r
en frente der'(["])'
significa que es un cuerda cruda. Las cadenas sin formato utilizan diferentes reglas para escapar de las barras diagonales inversas. Escribir(["])
como una cadena simple, necesitaría duplicar todas las barras diagonales inversas y escribir'([\"])'
. Las cadenas sin formato son más amigables cuando escribe expresiones regulares. - En el sustitución patrón, necesitas escapar
para distinguirlo de una barra invertida que precede a un grupo de sustitución, p. ej.
1
, por esor'\1'
. Escribir
ese como una cuerda simple, necesitarías'\\\1'
– y nadie quiere eso.
Utilice repr ()[1:-1]. En este caso, no es necesario escapar de las comillas dobles. los [-1:1] slice es eliminar las comillas simples del principio y del final.
>>> x = raw_input()
I'm "stuck" :
>>> print x
I'm "stuck" :
>>> print repr(x)[1:-1]
I'm "stuck" :\
¿O tal vez solo desea escapar de una frase para pegarla en su programa? Si es así, haz esto:
>>> raw_input()
I'm "stuck" :
'I'm "stuck" :\'