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

时间:2013-09-21 17:55:27

标签: python nginx escaping

我试图用一个反斜杠-]\^$*.来逃避每个字符\

例如,字符串:^stack.*/overflo\w$arr=1将变为:

\^stack\.\*/overflo\\w\$arr=1

在Python中最有效的方法是什么?

re.escape双重逃脱,这不是我想要的:

'\\^stack\\.\\*\\/overflow\\$arr\\=1'

我需要这个以逃避其他东西(nginx)。

6 个答案:

答案 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}'

检查链接:https://docs.python.org/3/library/functions.html#repr