Python:子模式不会替换找到的所有模式

时间:2013-05-29 00:46:09

标签: python regex replace

我想获取以下代码:

pattern = r"#(.*?)#"
pattern_obj = re.compile(pattern, re.MULTILINE)
translation = pattern_obj.sub("<li>\\1</li>", 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)

1 个答案:

答案 0 :(得分:-1)

来自docs

  

(点。)在默认模式下,它匹配除a以外的任何字符   新队。如果指定了DOTALL标志,则匹配任何标志   字符包括换行符。

由于.与新行不匹配,因此表达式仅查找第一行作为匹配项。

但是,设置DOTALL标志也无济于事。由于正则表达式特殊字符通常是贪婪的,因此您最终会匹配第一个#和最后一个#之间的所有文字。

我可能会弄错,但我相信你需要逐行完成。