使用逗号分隔符拆分字符串,但如果它是使用 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)
断言匹配后不能跟数字。
在 c# 中这应该可以工作。
@"(?<!$\d+),(?!\d+)"
我建议抓取捕获而不是拆分。
($\d+(?:,\d+)*(?:\.\d+)*)|([^,\n]+)
尝试 this.See demo.You 稍后可以将 -
附加到每个 capture
或 group
结果。
只是给出了一些非正则表达式的答案。您可以执行以下操作:
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(",");
}
这会将货币逗号替换为句点或您想要的任何内容,以便您可以轻松地用逗号分隔字符串。获得令牌后,您可以随时将其改回逗号。请注意,这仅在货币值始终有小数的假设下有效。
我必须拆分一个包含正常值和货币值的字符串
i.e. aaa,bbb,,222,ccc,,000
预期输出:
-aaa
-bbb
-,222
-ccc
-,000
根据下面的正则表达式拆分即可。
@",(?!\d)"
这将匹配所有后面没有跟数字的逗号。 (?!\d)
断言匹配后不能跟数字。
在 c# 中这应该可以工作。
@"(?<!$\d+),(?!\d+)"
我建议抓取捕获而不是拆分。
($\d+(?:,\d+)*(?:\.\d+)*)|([^,\n]+)
尝试 this.See demo.You 稍后可以将 -
附加到每个 capture
或 group
结果。
只是给出了一些非正则表达式的答案。您可以执行以下操作:
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(",");
}
这会将货币逗号替换为句点或您想要的任何内容,以便您可以轻松地用逗号分隔字符串。获得令牌后,您可以随时将其改回逗号。请注意,这仅在货币值始终有小数的假设下有效。