使用C#中的Regex替换除第一次出现之外的所有字符串空格。

时间:2018-01-04 12:05:24

标签: c# .net regex string regex-negation

输入字符串有多个空格,结果只剩下一个空格,其他空格必须用string替换.Empty

输入字符串:+1 580 5691 234(435) 772-5992

输出字符串:+1 5805691234+1 4357725992

Regex.Replace(text, @"[^\d]", string.Empty)替换所有空格。

3 个答案:

答案 0 :(得分:0)

您不必在一行内完成所有操作:

根据需要删除特殊字符,获取第一个空格的位置,仅在第一个空格后的子字符串中使用正则表达式删除空格。

答案 1 :(得分:0)

如果您绝对必须使用单个正则表达式执行此操作,这可能是您的解决方案:

替换

^(?:\+1)?\D*(\d*)?\D*(\d*)?\D*(\d*)?\D*(\d*)?\D*(\d*)?$

+1 $1$2$3$4$5

使用5个单独的捕获组,它会捕获数字,可能由非数字分隔。如果少于5个数字组,则忽略它们。

请注意,可选的前一个国家/地区代码也不会被捕获,并且替换字符串始终会插入它(如果存在则返回)。

此特定示例将数字组的数量限制为5,但可以轻松扩展。

Here at regexstorm.net

and illustrated here at regex101

答案 2 :(得分:0)

.NET Regex引擎可以通过lookbehind管理它:

(?<=\s+.*)\s+

它匹配所有空格块,前面至少有一个空格块,后跟一些非空白字符。

在字符串Regex.Replace(text, "(?<=\s+.*)\s+", string.Empty)上将其用作+1 580 5691 234会生成输出+1 5805691234