我想转换这样的文本:
$$
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 - 多行正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102487/