正则表达式搜索单个0并添加逗号

我有以下所有数字数据:

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); 

但无法弄清楚如何在每个数字之间添加逗号。 任何帮助,将不胜感激。 谢谢。

您可以通过一个Regex.Replace操作实现所需,但使用自定义匹配评估器:

 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 ,它位于开头或前面有空格,后跟1个或多个空格( 0后的空格存储在组1中)
  • | – 要么
  • (\s+0)$ – 第2组捕获一个或多个空格,然后在字符串的末尾( $ )为0
  • | – 要么
  • \s+ – (第3个选项)所有其他上下文中的1个或多个空格。

并且,如果有人喜欢更易读的版本,这里有一个替代方案,其中使用字符串方法删除最后的0 ,然后使用1个正则表达式用逗号替换数字内的所有空格,但在我们用a替换所有0之前仅仅是String.Replace

 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"); 

我明白你想要的

  • 用逗号替换空格(“xy z”=>“xy,z”)
  • 用空格替换单个零(“xy 0 z”=>“xy,z”)

然后我会建议两个字符串替换:

  1. inData.replace(" ", ",");
  2. inData.replace(",0", " ");

使用它将用逗号替换任何空格字符。

 var result = Regex.Replace(inData, @"\s+", ","); 

\s+匹配任何空格字符。

然后运行你的其他正则表达式删除单个数字0

你可以做一个string.replace(“”,“,”),对吗? (如果我正确理解你的问题)

或者您甚至可以将string.split(“”)转换为数组,然后执行string.join(’,’)。 虽然这可能效率较低。