1 回答
TA贡献1772条经验 获得超5个赞
您缺少某些内容,即r前缀:
r = re.compile(r"\\.") # Slash followed by anything
python和re将含义附加到\; 当您将字符串值传递给时re.compile(),您加倍的反斜杠将变成一个反斜杠,此时re将看到\.,表示字面句号。
>>> print """\\."""
\.
通过使用r''您告诉python不要解释转义码,因此现在re给了一个带的字符串\\.,表示文字反斜杠后跟任何字符:
>>> print r"""\\."""
\\.
演示:
>>> import re
>>> s = "test \\* \\! test * !! **"
>>> r = re.compile(r"\\.") # Slash followed by anything
>>> r.sub("-", s)
'test - - test * !! **'
经验法则是:在定义正则表达式时,请使用r''原始字符串文字,从而使您不必对所有对Python和正则表达式语法均有意义的内容进行两次转义。
接下来,您要替换“转义”字符;为此,请使用组,re.sub()让您引用组作为替换值:
r = re.compile(r"\\(.)") # Note the parethesis, that's a capturing group
r.sub(r'\1', s) # \1 means: replace with value of first capturing group
现在的输出是:
>>> r = re.compile(r"\\(.)") # Note the parethesis, that's a capturing group
>>> r.sub(r'\1', s)
'test * ! test * !! **'
添加回答
举报