Python 是否有一个函数可以用来转义字符串中的特殊字符?
例如,I'm "stuck" :\应该变成 I\'m \"stuck\" :\\。
I'm "stuck" :\
I\'m \"stuck\" :\\
使用 re.escape
re.escape
>>> import re >>> re.escape(r'\ a.*$') '\\\\\\ a\\.\\*\\$' >>> print(re.escape(r'\ a.*$')) \\\ a\.\*\$ >>> re.escape('www.stackoverflow.com') 'www\\.stackoverflow\\.com' >>> print(re.escape('www.stackoverflow.com')) www\.stackoverflow\.com
重复一遍:
Escape (字符串) 返回带有所有非字母数字反斜线的字符串; 如果您希望匹配可能包含正则表达式元字符的任意文本字符串,这非常有用。
Escape (字符串)
返回带有所有非字母数字反斜线的字符串; 如果您希望匹配可能包含正则表达式元字符的任意文本字符串,这非常有用。
从 Python 3.7开始,re.escape()改为只转义对正则表达式操作有意义的字符。
re.escape()
注意: 这个答案是为了回答最初的问题而写的,它要求使用一个通用的 “可用于转义特殊字符的函数”,没有指定这些将用于正则表达式,也没有进一步指定 什么特殊字符将必须转义。
为了转义一组任意的“特殊字符”,您可以编写一个自定义函数,用转义变量替换这些字符中的每一个。就像这样:
def escapeSpecialCharacters ( text, characters ): for character in characters: text = text.replace( character, '\\' + character ) return text >>> escapeSpecialCharacters( 'I\'m "stuck" :\\', '\'"' ) 'I\\\'m \\"stuck\\" :\\' >>> print( _ ) I\'m \"stuck\" :\
使用 repr ()[1:-1]。在本例中,不需要转义双引号。[-1:1]切片是为了删除开头和结尾的单引号。
>>> x = raw_input() I'm "stuck" :\ >>> print x I'm "stuck" :\ >>> print repr(x)[1:-1] I\'m "stuck" :\\
或者您只是想转义一个短语粘贴到您的程序中? 如果是这样,请这样做:
>>> raw_input() I'm "stuck" :\ 'I\'m "stuck" :\\'
我很惊讶没有人提到通过 re.sub()使用正则表达式:
re.sub()
import re print re.sub(r'([\"])', r'\\\1', 'it\'s "this"') # it's \"this\" print re.sub(r"([\'])", r'\\\1', 'it\'s "this"') # it\'s "this" print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"') # it\'s\ \"this\"
需要注意的重要事项:
\
([\"])
\1
r'([\"])'
r
'([\\"])'
r'\\\1'
'\\\\\\1'
如上所述,答案取决于你的情况。如果想转义正则表达式的字符串,那么应该使用 re.escape ()。但是如果你想转义一组特定的字符,那么使用这个 lambda 函数:
>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s) >>> s = raw_input() I'm "stuck" :\ >>> print s I'm "stuck" :\ >>> print escape(s, "\\", ['"']) I'm \"stuck\" :\\
如果只想替换某些字符,可以使用以下命令:
import re print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")
使用 json:
import json print(r"""(I'm "stuck" :\)""") # (I'm "stuck" :\) print(json.dumps(r"""(I'm "stuck" :\)""")) # (I'm "stuck" :\)
为 json 设置带转义字符的字符串
json.dumps(json.dumps(d))