为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 2021-03-15 12:13:01
我不使用正则表达式解析大量的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 anythingr.sub("-", s)应该这样:test - - test * !! **但是它什么也没做。我在这里想念什么吗?此外,我不确定如何用其原始字符替换任何给定的转义字符,因此我可能只用特定的正则表达式列出和子目录,例如:\\\*和\\!可能有一种更清洁的方法来执行此操作,因此非常感谢您的帮助。
查看完整描述

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 * !! **'


查看完整回答
反对 回复 2021-03-29
  • 1 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信