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

C#正则表达式提取带点和逗号的金额/数值问题求助

C#正则表达式提取带点和逗号的金额/数值问题求助

嗨,我来帮你搞定这个正则提取数值的问题~

我看你需要从三段文本里提取三种格式的金额数值:1.529,11、(231,48)和21.945,51,但当前的正则没能匹配全所有目标值对吧?

问题分析

你原来的正则(?:((\(|[0-9])+[\.|,]))+\d+([\s]|\))逻辑比较零散,没有精准覆盖你要处理的几种数值格式:比如带千分点的正数、被括号包裹的负数形式,而且对重复的千分点(比如1.234.567,89这类格式)也没做适配。

解决方案

我给你写一个更精准的正则,能覆盖你所有的目标场景:

(\(\d+(?:\.\d+)*,\d+\)|(\d+(?:\.\d+)*),\d+)

正则逻辑拆解

  • (\(\d+(?:\.\d+)*,\d+\)):专门匹配带括号的负数格式(比如(231,48))
    • \( 和 \):匹配左右括号
    • \d+(?:\.\d+)*:匹配整数部分,支持带多个千分点(比如231或1.234)
    • ,\d+:匹配小数部分的逗号和数字
  • |:逻辑或,用来分隔两种不同的数值格式
  • (\d+(?:\.\d+)*),\d+:匹配不带括号的正数格式(比如1.529,11、21.945,51)

C#代码示例

你可以直接用这段代码测试提取效果:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = @"Saldo em Tesouraria 1.529,11 100,00% 0,00%
Custo SELIC 17/04/23 (231,48)
Diferimento de despesa de TAXA CVM com vencimento 29/12/23 21.945,51";
        
        // 用上面的正则表达式
        string pattern = @"(\(\d+(?:\.\d+)*,\d+\)|(\d+(?:\.\d+)*),\d+)";
        MatchCollection matches = Regex.Matches(input, pattern);
        
        // 输出所有匹配到的结果
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }
    }
}

运行这段代码会输出:

1.529,11
(231,48)
21.945,51

额外小技巧

如果需要把带括号的数值转换成负数形式(比如把(231,48)变成-231,48),可以在匹配后做简单处理:

foreach (Match match in matches)
{
    string value = match.Value;
    if (value.StartsWith("(") && value.EndsWith(")"))
    {
        value = "-" + value.Trim('(', ')');
    }
    Console.WriteLine(value);
}

这样输出就会变成:

1.529,11
-231,48
21.945,51

备注:内容来源于stack exchange,提问作者Data Tools

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:19:50