正则表达式用原始字符替换“转义的”字符

我不使用正则表达式解析大量的html或通用html。我知道那很不好


TL; DR:


我有像


A sentence with an exclamation\! Next is a \* character

原始标记中有“转义”字符的位置。我希望用他们的“原著”代替它们。并获得:


A sentence with an exclamation! Next is a * character

我需要从一些Wiki标记中提取少量数据。


我在这里只处理段落/摘要,因此不需要强大的强大解决方案。在python中,我尝试了一个测试:


s = "test \\* \\! test * !! **"


r = re.compile("""\\.""") # Slash followed by anything


r.sub("-", s)

应该这样:


test - - test * !! **

但是它什么也没做。我在这里想念什么吗?


此外,我不确定如何用其原始字符替换任何给定的转义字符,因此我可能只用特定的正则表达式列出和子目录,例如:


\\\*


\\!

可能有一种更清洁的方法来执行此操作,因此非常感谢您的帮助。


繁星点点滴滴
浏览 197回答 1
1回答

月关宝盒

您缺少某些内容,即r前缀:r = re.compile(r"\\.") # Slash followed by anythingpython和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 groupr.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 * !! **'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python