如何用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
相关产品推荐
相关产品推荐

