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
这将用句号或您想要的任何符号替换货币逗号,以便您可以轻松地用逗号分割字符串。您可以在拥有令牌后始终将其改回逗号。请注意,这仅在货币值始终有小数的假设下有效。请您解释一下这个正则表达式。@pikachu这将如果
aaa,123
你想要吗?我不想要,我的字符串是这样的:aaa,$1200012345,bbb,56789,ccc,我想要最后的数组是:-aaa-$12000-12345-bbb-56789-ccc@pikachu我想我的更新将为您提供上述输入的预期输出。@AvinashRaj猜想您应该删除旧答案作为OP的期望没有得到满足it@pikachu太棒了。如果您最终使用它,请记住接受它;)