正则表达式搜索单个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”)
然后我会建议两个字符串替换:
-
inData.replace(" ", ",");
, -
inData.replace(",0", " ");
使用它将用逗号替换任何空格字符。
var result = Regex.Replace(inData, @"\s+", ",");
\s+
匹配任何空格字符。
然后运行你的其他正则表达式删除单个数字0
你可以做一个string.replace(“”,“,”),对吗? (如果我正确理解你的问题)
或者您甚至可以将string.split(“”)转换为数组,然后执行string.join(’,’)。 虽然这可能效率较低。