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

.NET 7正则匹配问题:如何提取Vat文本及对应金额

正确实现方法

1. 编写精准的正则表达式

针对目标发票文本,使用带命名分组的正则表达式,确保能准确捕获所需内容:

string pattern = @"(?<kmtekst>Vat 20%) _(?<kmaks>\d+,\d+)";
  • (?<kmtekst>Vat 20%):命名分组kmtekst,专门捕获“Vat 20%”这段文本
  • _:匹配文本中分隔标签与数值的下划线
  • (?<kmaks>\d+,\d+):命名分组kmaks,捕获类似“9,63”的小数格式(整数部分+逗号+小数部分)

2. 在ASP.NET MVC控制器中实现提取逻辑

在控制器方法里,加载发票文本后通过Regex.Match执行匹配,再从Groups属性中获取分组值:

using System.Text.RegularExpressions;

public class InvoiceController : Controller
{
    public IActionResult ExtractVatData()
    {
        // 发票原始内容
        string invoiceContent = @"Sum without 20% _48,15
Vat 20% _9,63
Invoice total (EUR)_57,78";

        string pattern = @"(?<kmtekst>Vat 20%) _(?<kmaks>\d+,\d+)";
        Match matchResult = Regex.Match(invoiceContent, pattern);

        if (matchResult.Success)
        {
            // 获取分组对应的值
            string kmtekst = matchResult.Groups["kmtekst"].Value;
            string kmaks = matchResult.Groups["kmaks"].Value;

            // 后续业务处理,比如传递到视图或存入数据库
            ViewBag.VatLabel = kmtekst;
            ViewBag.VatAmount = kmaks;
        }

        return View();
    }
}

3. 分组为空的常见原因排查

如果之前出现分组值为空的情况,大概率是以下问题:

  • 正则表达式未正确定义命名分组,或分组名称拼写错误
  • 匹配的文本格式与正则预期不符(比如下划线前后有空格,但正则未处理)
  • 误使用Regex.Matches却未遍历结果,或直接取了整个匹配结果而非分组内容

如果需要兼容更多格式(比如税率可能变化、下划线前后有空格),可以使用更灵活的正则:

// 兼容税率变动、下划线前后可能存在空格的场景
string flexiblePattern = @"(?<kmtekst>Vat \d+%)\s*_\s*(?<kmaks>\d+,\d+)";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:40:09