如何转义Python字符串中的任何特殊shell字符?
以下字符需要转义:
$,!,#,&,",',(,),|,<,>,`,\,;
例如说我有这个字符串:
str="The$!cat#&ran\"'up()a|<>tree`\;"
TIA
答案 0 :(得分:6)
在Python3中,所需的电池包含在shlex.quote
中。
shlex.quote(s)
返回字符串
s
的shell转义版本。返回的值是一个字符串,可以安全地用作shell命令行中的一个标记。
在你的例子中:
import shlex
s = "The$!cat#&ran\"'up()a|<>tree`\;"
print(shlex.quote(s))
输出:
'The$!cat#&ran"'"'"'up()a|<>tree`\;'
答案 1 :(得分:1)
不确定为什么要逃避一切而不是尽可能多地引用,但是,这应该这样做(如果需要,将'@'
替换为字符串中不存在的另一个字符):
>>> escape_these = r'([$!#&"()|<>`\;' + "'])"
>>> print(re.sub(escape_these, r'@\1', s).replace('@','\\'))
The\$\!cat\#\&ran\"\'up\(\)a\|\<\>tree\`\\;
这可能是一点点逃避诡计,但不幸的是,字符串re
和shell都使用\
(反斜杠)进行转义和其他特殊目的,确实让事情变得复杂: - )。
答案 2 :(得分:0)
re.sub
将完成这项工作:
re.sub("(!|\$|#|&|\"|\'|\(|\)|\||<|>|`|\\\|;)", r"\\\1", astr)
<强>输出强>
The\$\!cat\#\&ran\"\'up\(\)a\|\<\>tree\`\\\;