我试图-]\^$*.
用一个反斜杠来转义每个字符\
。
例如字符串:^stack.*/overflo\w$arr=1
将变为:
\^stack\.\*/overflo\\w\$arr=1
在 Python 中最有效的方法是什么?
re.escape
双重转义,这不是我想要的:
'\\^stack\\.\\*\\/overflow\\$arr\\=1'
我需要这个来逃避别的东西(nginx)。
这是一种方法(在 Python 3.x 中):
escaped = a_string.translate(str.maketrans({"-": r"\-",
"]": r"\]",
"\\": r"\\",
"^": r"\^",
"$": r"\$",
"*": r"\*",
".": r"\."}))
作为参考,用于转义字符串以在正则表达式中使用:
import re
escaped = re.escape(a_string)
假设这是一个正则表达式,使用re.escape
.
我们可以使用内置函数repr()
或字符串插值fr'{}'
转义\
Python 3.7 中的所有反斜杠。*
repr('my_string')
或者fr'{my_string}'
re.escape
不会双重逃脱。如果您在 repl 中运行,它看起来就像它一样。第二层转义是输出到屏幕造成的。
使用 repl 时,尝试使用print
来查看字符串中的真实内容。
$ python
>>> import re
>>> re.escape("\^stack\.\*/overflo\\w\$arr=1")
'\\\\\\^stack\\\\\\.\\\\\\*\\/overflo\\\\w\\\\\\$arr\\=1'
>>> print re.escape("\^stack\.\*/overflo\\w\$arr=1")
\\\^stack\\\.\\\*\/overflo\\w\\\$arr\=1
>>>
简单地使用re.sub
可能也可以代替str.maketrans
. 这也适用于 python 2.x
>>> print(re.sub(r'(\-|\]|\^|\$|\*|\.|\\)',lambda m:{'-':'\-',']':'\]','\\':'\\\\','^':'\^','$':'\$','*':'\*','.':'\.'}[m.group()],"^stack.*/overflo\w$arr=1"))
\^stack\.\*/overflo\\w\$arr=1
利用内置的输出repr
来处理\r\n\t
和处理re.escape
你想要的输出:
re.escape(repr(a)[1:-1]).replace('\\\\', '\\')