Python 是否有一个函数可以用来转义字符串中的特殊字符?
例如,I'm "stuck" :\
应变为 I\'m \"stuck\" :\\
。
>>> 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()
已更改为仅转义对正则表达式操作有意义的字符。
我很惊讶没有人提到通过 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]
print(repr("I'm stuck")[1:-1])
打印 I'm stuck
。
如上所述,答案取决于您的情况。如果你想为正则表达式转义字符串,那么你应该使用 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.")
注意:此答案是针对原始问题编写的,该问题的编写方式是要求通用“可以[用于]转义特殊字符的函数”,但未指定这些将用于正则表达式,并且没有进一步指定必须转义哪些特殊字符。
为了转义任意一组“特殊字符”,您可以编写一个自定义函数,用转义变体替换这些字符中的每一个。像这样的东西:
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\" :\
characters
之一,最好是第一个!
不定期副业成功案例分享
regex.escape(pattern,string,special_only=True