如何用单个反斜杠转义string的特殊字符

我试图逃避人物-]\^$*. 每个都有一个反斜杠\

例如string: ^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

简单地使用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('\\\\', '\\') 

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 >>>