使用逗号分隔符分割字符串,但如果它是使用c#的货币值则不分割

本文关键字:分割 货币 分隔符 字符串 如果 | 更新日期: 2023-09-27 17:53:39

我必须拆分一个包含正常值和货币值的字符串

i.e. aaa,bbb,$33,222,ccc,$22,000

期望输出:

-aaa
-bbb
-$33,222
-ccc
-$22,000

使用逗号分隔符分割字符串,但如果它是使用c#的货币值则不分割

按照下面的正则表达式进行分割。

@",(?!'d)"

将匹配后面没有数字的所有逗号。(?!'d)断言匹配后不能跟数字

演示

在c#中应该可以。

@"(?<!'$'d+),(?!'d+)"

只是给出了一个非正则表达式的答案。您可以执行以下操作:

String[] MySplit(String str)
{
    bool currency = false;
    char[] chars = str.ToCharArray();
    for(int i = 0; i < str.Length(); ++i)
    {
       if(chars[i] == '$')
          currency=true;
       else
       if(currency && chars[i] == ',')
       {
           chars[i] = '.';
           currency = false;
       }
    }
    return new String(chars).Split(",");
}

这将用句号或任何你想要的东西替换货币逗号,这样你就可以舒服地用逗号分割字符串。一旦有了令牌,您总是可以将其更改回逗号。注意,这只适用于货币值总是有小数的假设。

我建议抓取而不是分割。

('$'d+(?:,'d+)*(?:'.'d+)*)|([^,'n]+)

试试这个。看到演示。您可以稍后将-附加到每个capturegroup结果。

https://regex101.com/r/nS2lT4/14