求适用于.NET 7的发票金额正则表达式(含千分位与可选负号)
提取发票金额的C#正则表达式方案
针对你需要提取的发票金额格式(保留两位小数,小数点支持逗号/点号,千分位用单个空格分隔,可带负号),这里给出适配.NET 7的正则表达式:
Regex regex = new Regex(@"-?\d+(?: \d{3})*(?:[.,]\d{2})", RegexOptions.Compiled);
正则结构说明
-?:匹配可选的负号,支持负数金额\d+:匹配金额整数部分的开头数字,至少一位(?: \d{3})*:匹配零次或多次“空格+三位数字”的千分位分隔格式,用非捕获组(?:...)避免生成多余的捕获结果(?:[.,]\d{2}):匹配小数点(逗号或点号)加固定两位小数的结构,同样使用非捕获组
使用示例
以下是在ASP.NET MVC项目中提取金额的代码示例:
string invoiceText = @"Subtotal, 1 000.00 EUR VAT 1000,00 Total, sum: -343 444.45 EUR"; var regex = new Regex(@"-?\d+(?: \d{3})*(?:[.,]\d{2})", RegexOptions.Compiled); var matches = regex.Matches(invoiceText); // 遍历所有匹配到的金额 foreach (Match match in matches) { string amount = match.Value; // 后续处理逻辑,比如存入数据库或展示 }
运行后会提取到以下结果:
1 000.00 1000,00 -343 444.45
这个正则会全局扫描输入文本,无需限制每行仅含一个金额,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

