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

如何使用正则表达式替换Markdown中LaTeX块内的空格为\;

问题:替换Markdown中LaTeX代码内的空格为\;

需求说明

需要用正则表达式简化实现:将Markdown文档里被$或$$包裹的LaTeX代码中的空格替换为\;。

原文本示例

"dont edit this $result= \frac{1}{4}$ dont edit this $$some result=123$$"

期望转换结果

"dont edit this $result=\\;\frac{1}{4}$ dont edit this $$some\\;result=123$$"

现有繁琐实现

用户已通过复杂函数实现需求,代码如下:

import re
vals = r"dont edit this $result= \frac{1}{4}$ dont edit this $$some result=123$$"
def cleanlatex(vals):
    vals = vals.replace(" ", "  ")
    char1 = r"\$\$"
    char2 = r"\$"
    indices = [i.start() for i in re.finditer(char1, vals)]
    indices += [i.start() for i in re.finditer(char2, vals.replace("$$","~~"))]

    indices.sort()
    print(indices)
    # 检查$或$$的数量是否为偶数
    if len(indices) % 2 == 0:
        while indices:
            start = indices.pop(0)
            finish = indices.pop(0)
            vals = vals[:start] + vals[start:finish].replace('  ', '\;') + vals[finish:]
    
    vals = vals.replace("  ", " ")
    return vals

print(cleanlatex(vals))

现有代码输出

[18, 39, 60, 78]   
dont edit this $result=\\;\frac{1}{4}$ dont edit this $$some\\;result=123$$

简洁正则方案

利用re.sub()配合回调函数,可一次性处理所有LaTeX块:

import re

def replace_latex_spaces(text):
    def replacer(match):
        # 对匹配到的LaTeX块替换空格为\;
        return match.group(0).replace(" ", r"\;")
    
    # 正则优先匹配$$包裹的内容,再匹配单个$包裹的内容(避免和$$冲突)
    pattern = re.compile(r'\$\$(.*?)\$\$|\$(?!\$)(.*?)\$(?!\$)', re.DOTALL)
    return pattern.sub(replacer, text)

# 测试
vals = r"dont edit this $result= \frac{1}{4}$ dont edit this $$some result=123$$"
print(replace_latex_spaces(vals))

方案说明

  • 正则表达式逻辑:
    • \$\$(.*?)\$\$:匹配$$包裹的LaTeX内容,非贪婪模式防止跨块匹配
    • \$(?!\$)(.*?)\$(?!\$):匹配单个$包裹的内容,(?!\$)负向断言确保前后不是第二个$,避免和$$场景冲突
  • re.DOTALL参数:让.匹配换行符,支持多行LaTeX块
  • 回调函数replacer:对每个匹配到的LaTeX块执行空格替换操作

运行结果

"dont edit this $result=\\;\frac{1}{4}$ dont edit this $$some\\;result=123$$"

内容的提问来源于stack exchange,提问作者Dara O h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:15