繁体   English   中英

多行正则表达式替换

[英]Multiline regex replace

我想转换一个文本,如:

$$
foo
bar
$$

<% tex
foo
bar
%>

$\\alpha$<% tex \\alpha %>

对于单行替换,我这样做:

re.sub(r"\$(.*)\$", r"<% tex \1 %>", text)

......它工作正常。

现在,我添加了多行标志来捕获多行标志:

re.sub(r"(?i)\$\$(.*)\$\$", r"<% tex \1 %>", text)

...但它返回:

<% tex  %>
foo
bar
<% tex  %>

为什么? 我确定这是微不足道的,但我无法想象。

我建议使用re.M(多线)标志,并在你的捕获中吞噬所有不是美元符号的东西。

>>> import re
>>> t = """$$
foo
bar
$$"""
>>> re.sub(r"\$\$([^\$]+)\$\$", r"<% tex \1 %>", t, re.M)
'<% tex \nfoo\nbar\n %>'

使用python 2.7.12我已经验证这将工作:

>>> import re
>>> t = """$$
... foo
... bar
... $$"""
>>> re.sub(r"\$\$(.*?)\$\$", r"<% tex \1 %>", t, flags=re.DOTALL)
'<% tex \nfoo\nbar\n %>'

至于DOTALL标志,根据官方文件:

re.S

re.DOTALL

制作'。' 特殊字符可以匹配任何字符,包括换行符; 没有这个标志,'。' 将匹配除换行符之外的任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM