【问题标题】:Replace all occurrences of a white space from string except the first occurrence using Regex in C#在 C# 中使用 Regex 替换字符串中所有出现的空格,但第一次出现的空格除外
【发布时间】:2018-01-04 12:05:23
【问题描述】:

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

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

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

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

【问题讨论】:

  • [^\d] 也会删除第一个 +
  • 哦,是的,它会的:-)
  • 试试(?<!^\S*)\D(?<!^\+?\d*)\D。请添加一组或多或少全面的测试用例,或确切的模式要求。
  • 输入失败:(435) 772-5992,特殊字符也必须删除
  • 那么,435 7725992 是上述字符串的预期输出吗?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    .NET 正则表达式引擎可以通过后视来管理这个:

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

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

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

    【讨论】:

      【解决方案3】:

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

      替换

      ^(?:\+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.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-24
        相关资源
        最近更新 更多