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

Split string with comma delimiter but not if it is a currency value using C#

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

i.e. aaa,bbb,,222,ccc,,000

预期输出:

-aaa
-bbb
-,222
-ccc
-,000

根据下面的正则表达式拆分即可。

@",(?!\d)"

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

DEMO

在 c# 中这应该可以工作。

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

我建议抓取捕获而不是拆分。

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

尝试 this.See demo.You 稍后可以将 - 附加到每个 capturegroup 结果。

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

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

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(",");
}

这会将货币逗号替换为句点或您想要的任何内容,以便您可以轻松地用逗号分隔字符串。获得令牌后,您可以随时将其改回逗号。请注意,这仅在货币值始终有小数的假设下有效。