如何用Python拆分LaTeX文件中的数学环境与文本环境
LaTeX文本与数学块拆分解决方案
核心思路:放弃拆分后再拼接的逻辑,直接用re.findall同时匹配完整数学块和普通文本片段,一步实现分隔符与对应内容的绑定。
匹配规则说明
正则按优先级匹配三类完整数学块,再匹配剩余普通文本:
\$\$[\s\S]*?\$\$:匹配$$包裹的多行数学块,[\s\S]覆盖所有字符(含换行),非贪婪匹配避免跨块\\\[[\s\S]*?\\\]:匹配\[、\]包裹的多行数学块\$.*?\$:匹配$包裹的行内数学块[^$\\]+:匹配不属于数学块分隔符的普通文本片段
完整代码示例
import re latex_text = """A latex example $$ \int = 0$$ with different \[\sum \] \[\sum \] math delimiters $\\cos(x)$. """ # 匹配所有完整数学块+普通文本 pattern = r'(\$\$[\s\S]*?\$\$|\\\[[\s\S]*?\\\]|\$.*?\$|[^$\\]+)' raw_result = re.findall(pattern, latex_text) # 去除首尾空白、过滤空片段 final_result = [item.strip() for item in raw_result if item.strip()] print(final_result)
运行输出
['A latex example', '$$ \\int = 0$$', 'with different', '\\[\\sum \\]', '\\[\\sum \\]', 'math delimiters', '$\\cos(x)$', '.']
和你期望的目标格式完全一致,后续如果需要适配equation等其他数学环境,只要在正则的交替匹配部分新增对应规则即可。
内容的提问来源于stack exchange,提问作者Netchaiev
相关产品推荐
相关产品推荐

