Cadena de retorno con todos los caracteres no alfanuméricos invertidos; 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.
En el patrón de búsqueda , incluya \también los caracteres que está buscando. Vas a usar \para escapar de tus personajes, por lo que también debes escapar de
eso .
Ponga paréntesis alrededor del patrón de búsqueda , por ejemplo ([\"]), para que el
patrón de sustitución pueda usar el carácter encontrado cuando se agrega \delante de él. (Eso es lo que
\1hace: usa el valor del primer grupo entre paréntesis).
El rfrente de r'([\"])'significa que es una cadena cruda . Las cadenas sin formato utilizan diferentes reglas para escapar barras diagonales inversas. Para escribir ([\"])como una cadena simple, necesitaría duplicar todas las barras diagonales inversas y escribir '([\\"])'. Las cadenas sin formato son más amigables cuando escribes expresiones regulares.
En el patrón de sustitución , debe escapar \para distinguirlo de una barra diagonal inversa que precede a un grupo de sustitución, por ejemplo \1, por lo tanto r'\\\1'. Para escribir
eso como una cadena simple, necesitarías '\\\\\\1', y nadie quiere eso.
Use repr () [1: -1]. En este caso, las comillas dobles no necesitan escaparse. El segmento [-1: 1] es eliminar la comilla simple desde el principio y el final.
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck":\
>>>print repr(x)[1:-1]
I\'m "stuck":\\
¿O tal vez solo quieres escapar de una frase para pegarla en tu programa? Si es así, haz esto:
Eso no funciona si la cadena es unicode, porque tendrás u y deberías ejecutarrepr(x)[2:-1]
Antoine Pelisse
En python3.4, donde todas las cadenas son unicode, desafortunadamente no parece funcionar en absoluto. En cambio, print(repr("I'm stuck")[1:-1])impresiones I'm stuck.
dantiston
3
Como se mencionó anteriormente, la respuesta depende de su caso. Si desea escapar de una cadena para una expresión regular, debe usar re.escape (). Pero si desea escapar de un conjunto específico de caracteres, utilice esta función lambda:
>>> escape =lambda s, escapechar, specialchars:"".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck":\
>>>print escape(s,"\\",['"'])
I'm \"stuck\" :\\
Respuestas:
Utilizar
re.escape
Repitiéndolo aquí:
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.fuente
regex.escape(pattern,string,special_only=True
Me sorprende que nadie haya mencionado el uso de expresiones regulares a través de
re.sub()
:Cosas importantes a tener en cuenta:
\
también los caracteres que está buscando. Vas a usar\
para escapar de tus personajes, por lo que también debes escapar de eso .([\"])
, para que el patrón de sustitución pueda usar el carácter encontrado cuando se agrega\
delante de él. (Eso es lo que\1
hace: usa el valor del primer grupo entre paréntesis).r
frente der'([\"])'
significa que es una cadena cruda . Las cadenas sin formato utilizan diferentes reglas para escapar barras diagonales inversas. Para escribir([\"])
como una cadena simple, necesitaría duplicar todas las barras diagonales inversas y escribir'([\\"])'
. Las cadenas sin formato son más amigables cuando escribes expresiones regulares.\
para distinguirlo de una barra diagonal inversa que precede a un grupo de sustitución, por ejemplo\1
, por lo tantor'\\\1'
. Para escribir eso como una cadena simple, necesitarías'\\\\\\1'
, y nadie quiere eso.fuente
Use repr () [1: -1]. En este caso, las comillas dobles no necesitan escaparse. El segmento [-1: 1] es eliminar la comilla simple desde el principio y el final.
¿O tal vez solo quieres escapar de una frase para pegarla en tu programa? Si es así, haz esto:
fuente
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])
impresionesI'm stuck
.Como se mencionó anteriormente, la respuesta depende de su caso. Si desea escapar de una cadena para una expresión regular, debe usar re.escape (). Pero si desea escapar de un conjunto específico de caracteres, utilice esta función lambda:
fuente
No es tan dificil:
fuente
characters
ellas, ¡será mejor que sea la primera!Si solo desea reemplazar algunos caracteres, puede usar esto:
fuente