You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python拆分含行内、块级公式的LaTeX字符串并保留顺序

Python实现LaTeX文本与公式拆分方案

核心思路

用正则表达式按优先级匹配块级公式、行内公式、普通文本,提取所有非空匹配结果即可保留原有顺序,匹配优先级设置如下:

  • 优先匹配$$包裹的块级公式,避免被误识别为两个行内公式
  • 其次匹配$包裹的行内公式
  • 最后匹配不含$的普通文本片段

实现代码

import re

def split_latex_content(s):
    # 正则模式:非贪婪匹配避免跨公式越界,re.DOTALL支持匹配换行符
    pattern = r'\$\$(.*?)\$\$|\$(.*?)\$|([^$]+)'
    matches = re.findall(pattern, s, re.DOTALL)
    # 过滤空分组,提取有效内容
    result = [item for group in matches for item in group if item]
    # 如果你需要把普通文本按空格拆分为独立单词,可替换为下方代码
    # result = []
    # for group in matches:
    #     for item in group:
    #         if item:
    #             if '$' not in item: # 普通文本按空格拆分
    #                 result.extend([i for i in item.split(' ') if i])
    #             else:
    #                 result.append(item)
    return result

# 测试示例
test_str = 'Functions $f(x)$ and $g(x)$ is related as $$f(x)-g(x)=h(x)$$'
print(split_latex_content(test_str))

运行后默认输出结果为:

['Functions ', 'f(x)', ' and ', 'g(x)', ' is related as ', 'f(x)-g(x)=h(x)']

打开注释的普通文本拆分逻辑后,即可得到你示例中要求的单词独立拆分的结果。

兼容场景说明

如果需要处理LaTeX中存在转义\$的业务场景,只需把正则模式调整为r'(?<!\\)\$\$(.*?)(?<!\\)\$\$|(?<!\\)\$(.*?)(?<!\\)\$|((?:[^$]|\\\$)+)',即可识别转义的美元符号,不会误判为公式边界。

内容的提问来源于stack exchange,提问作者Physics Futuring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 04:54:00