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

C# 使用逗号分隔符拆分字符串,但如果它是使用C的货币值,则不拆分#,c#,regex,split,C#,Regex,Split,我必须拆分一个包含正常值和货币值的字符串 i.e. aaa,bbb,$33,222,ccc,$22,000 预期产出: -aaa -bbb -$33,222 -ccc -$22,000 根据下面的正则表达式进行拆分 @",(?!\d)" 这将匹配所有未后跟数字的逗号(?!\d)声明匹配后不能跟数字 在c#中,这应该有效 @"(?<!\$\d+),(?!\d+)" (?我建议抓取捕获而不是拆分 (\$\d+(?:,\d+)*(?:\.\d+)*)|([^,\n]+) 尝试此操作。

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

i.e. aaa,bbb,$33,222,ccc,$22,000
预期产出:

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

根据下面的正则表达式进行拆分

@",(?!\d)"
这将匹配所有未后跟数字的逗号
(?!\d)
声明匹配后不能跟数字

在c#中,这应该有效

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

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

(\$\d+(?:,\d+)*(?:\.\d+)*)|([^,\n]+)
尝试此操作。请参阅演示。您可以稍后将
-
附加到每个
捕获
结果


对于某些种类,只需给出一个非正则表达式的答案。您可以执行以下操作:

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(",");
}
String[]MySplit(String str)
{
布尔货币=假;
char[]chars=str.ToCharArray();
对于(int i=0;i