在python中使用正则表达式
我有以下问题。 我想转义python字符串中的所有特殊字符在python中使用正则表达式,python,regex,Python,Regex,我有以下问题。 我想转义python字符串中的所有特殊字符 str='eFEx-x?k=;-' re.sub("([^a-zA-Z0-9])",r'\\1', str) 'eFEx\\1x\\1k\\1\\1\\1' str='eFEx-x?k=;-' re.sub("([^a-zA-Z0-9])",r'\1', str) 'eFEx-x?k=;-' re.sub("([^a-zA-Z0-9])",r'\\\1', str) 我在这里似乎赢不了。”\1'表示特殊字符,我想在此特殊字
str='eFEx-x?k=;-'
re.sub("([^a-zA-Z0-9])",r'\\1', str)
'eFEx\\1x\\1k\\1\\1\\1'
str='eFEx-x?k=;-'
re.sub("([^a-zA-Z0-9])",r'\1', str)
'eFEx-x?k=;-'
re.sub("([^a-zA-Z0-9])",r'\\\1', str)
我在这里似乎赢不了。”\1'表示特殊字符,我想在此特殊字符之前添加一个“\”。但是使用\1删除了它的特殊含义,\\1也没有帮助。使用
r'\\\1'
。这是一个反斜杠(转义,表示为\\
),后跟\1
要验证此操作是否有效,请尝试:
str = 'eFEx-x?k=;-'
print re.sub("([^a-zA-Z0-9])",r'\\\1', str)
这张照片是:
eFEx\-x\?k\=\;\-
我想这就是你想要的。当解释器输出
'eFEx\\-x\\?k\\=\\\;\\-'代码>;出现双反斜杠是因为解释器引用了它的输出,除非您使用print
尝试添加另一个反斜杠:
s = 'eFEx-x?k=;-'
print re.sub("([^a-zA-Z0-9])",r'\\\1', s)
为什么不使用re.escape()
为什么上一个版本不起作用?如果“特殊字符”是指“对正则表达式有特殊意义的字符”,那么这肯定是您想要的str.encode('string-escape')
可能是另一种可能性,如果它是“Python字符串文本的特殊字符”。谁知道什么是“特别的”?>>re.sub(([^a-zA-Z0-9]),r'\\\1',str)'eFEx\\-x\\\?k\\\=\\\;\\\-'>>str='eFEx-x?k=;-'>>打印参考文件(“[a-zA-Z0-9]),r'\\\1',str)eFEx \-x \?k \=\-
str = 'eFEx-x?k=;-'
re.escape(str)
'eFEx\\-x\\?k\\=\\;\\-'