Tom*_*Tom 37 python escaping nginx
我试图-]\^$*.用一个反斜杠来逃避每个角色\.
例如,字符串:^stack.*/overflo\w$arr=1将变为:
\^stack\.\*/overflo\\w\$arr=1
Run Code Online (Sandbox Code Playgroud)
在Python中最有效的方法是什么?
re.escape 双逃脱不是我想要的:
'\\^stack\\.\\*\\/overflow\\$arr\\=1'
Run Code Online (Sandbox Code Playgroud)
我需要这个以逃避其他东西(nginx).
rlm*_*lms 84
这是一种方法(在Python 3.x中):
escaped = a_string.translate(str.maketrans({"-": r"\-",
"]": r"\]",
"\\": r"\\",
"^": r"\^",
"$": r"\$",
"*": r"\*",
".": r"\."}))
Run Code Online (Sandbox Code Playgroud)
作为参考,用于转义在正则表达式中使用的字符串:
import re
escaped = re.escape(a_string)
Run Code Online (Sandbox Code Playgroud)
Sag*_*ran 10
我们可以使用内置函数repr()或字符串插值来fr'{}'转义\Python 3.7 中的所有反斜杠。*
repr('my_string') 或者 fr'{my_string}'
检查链接:https : //docs.python.org/3/library/functions.html#repr
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
>>>
Run Code Online (Sandbox Code Playgroud)
简单地使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158378 次 |
| 最近记录: |