Regex和python:在TeX文档中用\[和\]替换$$

2024-07-05 12:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑: regex及其测试、示例和解决方案:https://www.regex101.com/r/rY7uI4/2

我正在尝试转换一个TeX内容(我们将假定它包含在变量foo中),以便分隔符$$将转换为标准TeX \[\]。我一直在玩regex101,但直到现在没有运气。你知道吗

理想情况下,预期结果是:

text
$$ math $$

$$
math
$$

text $$math$$ text

输出如下

text
\[ math \]

\[
math
\]

text \[math\] text

也许regexp不是最好的工具,但是我没有找到其他工具来完成这个任务。谢谢你的帮助!你知道吗

编辑: 要添加更复杂(更真实)的测试用例:

$$\alpha \quad \beta \quad \varepsilon \quad \varphi \quad \mathbb{R} \quad \mathcal{C}([0,1]) \quad \mathfrak{R}([0,2\pi]) \quad \mathscr{C}(\mathbb{R})$$
$$\vec{x} \in \mathbb{R}^n, \quad \underline{x}\in \mathbb{R}^m, \quad \mathbf{x}\in \mathbb{R}^m \$$$string

应导致:

\[\alpha \quad \beta \quad \varepsilon \quad \varphi \quad \mathbb{R} \quad \mathcal{C}([0,1]) \quad \mathfrak{R}([0,2\pi]) \quad \mathscr{C}(\mathbb{R})\]
\[\vec{x} \in \mathbb{R}^n, \quad \underline{x}\in \mathbb{R}^m, \quad \mathbf{x}\in \mathbb{R}^m \$\]string

注意在第二个字符串的末尾有一个转义$。你知道吗


Tags: 工具textinalpha编辑mathbetatex
2条回答

使用非贪婪正则表达式。你知道吗

print re.sub(r'\$\$(.*?)\$\$',r'\[\1\]',s)

如果您不想考虑转义的美元符号,那么使用负的lookback来检查最后一个$$前面是否有反斜杠字符。你知道吗

print re.sub(r'(?s)(?<!\\)\$\$(.*?)(?<!\\)\$\$',r'\[\1\]',s)

在开始处添加DOTALL修饰符(?s),使正则表达式中的点也与换行符(换行符)匹配。你知道吗

可以将re.subcapturing groups一起使用,如下所示:

>>> import re
>>> s="""text
... $$ math $$
... 
... $$
... math
... $$
... 
... text $$math$$ text"""
>>> print re.sub(r'\$\$\s?(\w+)\s?\$\$',r'\[\1\]',s)
text
\[math\]

\[math\]

text \[math\] text

\1是正则表达式模式中匹配的第一个组,在本例中(\w+)

编辑:如果你在$$之间有更多的文本,当你添加到你的编辑中时,你只需要改变\w.+匹配的单词字符来匹配任何长度超过1的字符。你知道吗

>>>re.sub(r'\${2,}\s?(.+?)\s?\${2,}',r'[\1]',s)

相关问题 更多 >