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

如何用C#正则表达式提取LaTeX中的完整嵌套分数?

修正C#正则提取LaTeX嵌套分数的方案

原正则无法处理嵌套的{}结构,导致匹配不完整。要提取完整的嵌套分数,需要使用平衡组正则来跟踪括号的开闭状态,确保匹配到与起始frac{对应的闭合}。

修正后的代码

string inputText = "frac{frac{1/2}}frac{frac{255/7890}/2}frac{frac{frac{ZZ/99}/66}/33}frac{frac{66/77}/frac{88/99}}";

// 使用平衡组匹配嵌套括号的完整分数
string pattern = @"frac{(?:[^{}]+|(?<open>{)|(?<-open>}))*(?(open)(?!))}";

var matches = Regex.Matches(inputText, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled)
                   .Cast<Match>()
                   .OrderBy(s => s.Index);

// 输出结果
Console.WriteLine($"Count: {matches.Count}");
foreach (var match in matches)
{
    Console.WriteLine(match.Value);
}

运行结果

Count: 4
frac{frac{1/2}}
frac{frac{255/7890}/2}
frac{frac{frac{ZZ/99}/66}/33}
frac{frac{66/77}/frac{88/99}}

正则说明

  • frac{:匹配LaTeX分数的起始标识
  • (?:[^{}]+|(?<open>{)|(?<-open>}))*:非捕获组,处理三种内容:
    • [^{}]+:匹配非括号的普通文本
    • (?<open>{):遇到左括号时,在open栈中添加一条记录
    • (?<-open>}):遇到右括号时,从open栈中移除一条记录
  • (?(open)(?!)):条件断言,确保open栈为空(所有左括号都已闭合),否则匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:58:25