C# 正则表达式搜索单个0';s并添加逗号
我有以下所有数字数据:C# 正则表达式搜索单个0';s并添加逗号,c#,regex,C#,Regex,我有以下所有数字数据: 4245 4 0 0242 4424.09 0 422404 5955 0 2234234.234 224 0 2423 234 0 我需要单独处理每一行。我需要删除所有单个0并使用逗号如下输出: 4245,4, 0242,4424.09, 422404,5955 2234234.234,224 2423,234 我得到了删除个位数的部分: var result = Regex.Replace(inData, @"\b\s0\b", string.Empty); 但
4245 4 0 0242 4424.09 0 422404 5955 0
2234234.234 224 0
2423 234 0
我需要单独处理每一行。我需要删除所有单个0并使用逗号如下输出:
4245,4, 0242,4424.09, 422404,5955
2234234.234,224
2423,234
我得到了删除个位数的部分:
var result = Regex.Replace(inData, @"\b\s0\b", string.Empty);
但无法计算如何在每个数字之间添加逗号。任何帮助都将不胜感激。谢谢。您可以只做一个字符串。替换(“,”,”),对吗?(如果我正确理解你的问题)
或者您甚至可以将string.split(“”)拆分为一个数组,然后执行string.join(“,”)。虽然这可能效率较低。我知道您想
- 用逗号替换空格(“xy z”=>“xy,z”)
- 将单个零替换为空格(“xy 0 z”=>“xy,z”)
inData.replace(“,”,”)代码>,
inData.replace(“,0”,“0”)代码>
使用此选项将用逗号替换任何空白字符
var result = Regex.Replace(inData, @"\s+", ",");
\s+
匹配任何空白字符
然后运行另一个正则表达式以删除单个数字0。您可以使用一个
正则表达式实现所需的功能。替换操作,但使用自定义匹配计算器:
var input = "4245 4 0 242 4424.09 0 422404 5955 0";
var results = Regex.Replace(input, @"(?:\s+|^)0(\s+)|(\s+0)$|\s+", m =>
m.Groups[1].Success ? ", " :
m.Groups[2].Success ? "" : ",");
重点是匹配我们需要的部分,并将其分为若干组,以便对其进行进一步分析并采取适当的行动
图案细节:
(?:\s+|^)0(\s+
-匹配0
,该值在开头或前面有空格,后面有一个或多个空格(0
后面的空格存储在组1中)
|
-或
(\s+0)$
-第2组捕获一个或多个空格,然后在字符串的末尾($
)添加一个0
|
-或
\s+
-(第三个选项)在所有其他上下文中有1个或多个空格
为了防止人们喜欢更可读的版本,这里有一个替代方案,用字符串方法删除最后的0
,然后使用1个正则表达式用逗号替换数字中的所有空格,但在我们用一个字符串替换所有0
之前,先替换
var inp = "4245 4 0 0242 4424.09 0 422404 5955 0";
inp = inp.EndsWith(" 0") ? inp.Substring(0, inp.Length - 2) : inp;
var output = Regex.Replace(inp.Replace(" 0 ", ", "), @"(\d) (\d)", "$1,$2");
你能不能用逗号代替空格,比如:result.replace(“,”,”)?每两个数字我还需要一个额外的空格。我想用正则表达式也可以,但可能不行。例如,1 2 0 5 6 0应该每两个数字产生1,2 5,6我还需要一个额外的空间。不确定这是否有效。我想用正则表达式也可以,但可能不行。例如,1 2 0 5 6 0应该生成1,2 5,6您可以使用从拆分创建的数组来生成1,2 5,6(只要您不使用非常大的数字)。否则,您可以使用vauhochzett提到的实现,并且后缀模式匹配“、d*,”并用空格替换第一个逗号。谢谢!我可以用一个正则表达式完成所有操作吗?很抱歉,一开始我没有看到0被删除,没有变成逗号!您需要使用2个正则表达式函数或2个字符串替换函数hanks@WiktorStribiżew。我最初发布时没有使用分隔符,但添加了它们,因为我认为我错过了它们!感谢您提供的信息-我不知道它们包含在默认值中谢谢您的解释DNKROZ,干得好。@DNKROZ:不客气:)另请参见哇谢谢您的回答和解释!这是一个完美的Wiktor,Wiktor,快速提问。同时删除-0需要什么条件。例如,“2423234-0120”将输出“2423234 1,2”谢谢。这很简单,只需添加一个可选的-
:@”(?:\s+|^)-?0(\s+)(\s+-?0)$\s+”
Wiktor感谢您的帮助。如果你有空的话,请看一下这个:谢谢。