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感谢您的帮助。如果你有空的话,请看一下这个:谢谢。