Python有没有可以用来转义字符串中特殊字符的函数?
例如,I'm "stuck" :\
应该变成 I\'m \"stuck\" :\\
。
使用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
重复一遍:
re.escape(string)
返回一个字符串,其中所有非字母数字字符都被反斜杠转义;如果您想匹配一个任意的文本字符串,该字符串可能包含正则表达式元字符,则此函数很有用。
从 Python 3.7 开始,re.escape()
只会转义那些对正则表达式操作有意义的字符。
regex.escape(pattern,string,special_only=True)
。 - Lokinoure.escape
会将例如换行符转换为反斜杠后跟换行符;相反,您可能希望得到反斜杠后跟小写字母 n。 - Karl Knechtel我很惊讶没有人提到使用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
表示它是一个原始字符串。原始字符串使用不同的规则来转义反斜杠。
要将([\"])
写成普通字符串,您需要将所有反斜杠都加倍并写成'([\\"])'
。当您编写正则表达式时,原始字符串更友好。\
以将其与前置于替换组前面的反斜杠区分开来,
例如\1
,因此为r'\\\1'
。如果要将它写为普通字符串,则需要'\\\\\\1'
,而没有人想要那样。使用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" :\\'
repr(x)[2:-1]
。 - Antoine Pelisseprint(repr("I'm stuck")[1:-1])
输出 I'm stuck
。 - dantistonrepr
将单引号视为需要转义的情况。 - Karl Knechtel正如上面提到的,答案取决于您的情况。如果您想为正则表达式转义一个字符串,则应使用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))
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\" :\
unicode-escape
,shlex.quote
。 - user202729