Python:子模式不';无法替换找到的所有图案
我正在尝试获取以下代码:Python:子模式不';无法替换找到的所有图案,python,regex,replace,Python,Regex,Replace,我正在尝试获取以下代码: pattern = r"#(.*?)#" pattern_obj = re.compile(pattern, re.MULTILINE) translation = pattern_obj.sub("<li>\\1</li>", translation) pattern=r“#(.*)#” pattern_obj=re.compile(pattern,re.MULTILINE) translation=模式对象sub(“\\1”,transla
pattern = r"#(.*?)#"
pattern_obj = re.compile(pattern, re.MULTILINE)
translation = pattern_obj.sub("<li>\\1</li>", translation)
pattern=r“#(.*)#”
pattern_obj=re.compile(pattern,re.MULTILINE)
translation=模式对象sub(“\\1 ”,translation)
查找由#包围的任何文本。它将替换第一个实例
>>><li> TEXT </li>
# More TEXT #
# Even more TEXT #
>>文本
#更多文本#
#更多文本#
有人能帮我吗
提前谢谢你
编辑:
我只是这样解决了这个问题
pattern = r"#([^#]*)#"
pattern_obj = re.compile(pattern, re.MULTILINE)
translation = pattern_obj.sub("<li>\\1</li>", translation)
pattern=r“#([^#]*)#”
pattern_obj=re.compile(pattern,re.MULTILINE)
translation=模式对象sub(“\\1 ”,translation)
来自:
(点。)在默认模式下,它匹配除a以外的任何字符
新线。如果指定了DOTALL标志,则该标志与任何
包含换行符的字符
由于
与新行不匹配,因此表达式仅查找匹配的第一行
但是,设置DOTALL
标志也没有帮助。一般来说,由于正则表达式特殊字符是贪婪的,因此最终将匹配第一个
和最后一个
之间的所有文本
我可能弄错了,但我相信您需要逐行执行此操作。即使没有“re.MULTLINE”,它也适用于我。奇怪的是,手动排除
#
修复了此问题。我本以为非贪婪的*?
会阻止这成为一个问题。也许括号把*?
的范围搞乱了。*
之后的?
使它不贪婪。即使*
是贪婪的,一旦
无法匹配新行,它将开始退出匹配,直到它能够匹配
。因此,这根本不应该影响执行。