我试图用一个反斜杠-]\^$*.
来逃避每个字符\
。
例如,字符串:^stack.*/overflo\w$arr=1
将变为:
\^stack\.\*/overflo\\w\$arr=1
在Python中最有效的方法是什么?
re.escape
双重逃脱,这不是我想要的:
'\\^stack\\.\\*\\/overflow\\$arr\\=1'
我需要这个以逃避其他东西(nginx)。
答案 0 :(得分:73)
这是一种方法(在Python 3.x中):
escaped = a_string.translate(str.maketrans({"-": r"\-",
"]": r"\]",
"\\": r"\\",
"^": r"\^",
"$": r"\$",
"*": r"\*",
".": r"\."}))
供参考,用于转义在正则表达式中使用的字符串:
import re
escaped = re.escape(a_string)
答案 1 :(得分:12)
只是假设这是正则表达式,请使用re.escape
。
答案 2 :(得分:5)
简单地使用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
答案 3 :(得分:4)
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
>>>
答案 4 :(得分:2)
利用内置repr
的输出来处理\r\n\t
并处理re.escape
的输出是您想要的:
re.escape(repr(a)[1:-1]).replace('\\\\', '\\')
答案 5 :(得分:1)
我们可以使用内置函数repr()
或字符串插值fr'{}'
来转义Python 3.7中的所有反斜杠\
。*
repr('my_string')
或fr'{my_string}'