代码之家  ›  专栏  ›  技术社区  ›  kyrisu

使用带有非捕获组的正则表达式解析数字

  •  0
  • kyrisu  · 技术社区  · 17 年前

    我正在用正则表达式解析电话号码。确切地说,我想使用如下函数获取包含电话号码的字符串:

    string phoneRegex = @"^([+]|00)(\d{2,12}(?:\s*-*)){1,5}$";
    string formated = Regex.Match(e.Value.ToString(), phoneRegex).Value;
    

    正如您所看到的,我试图使用非捕获组(?:\s*-*),但我做错了什么。

    预期资源应为:

    输入(e.值):+48 123 234 344或+48 123234344或+48 123-234-345

    输出:+48123234344

    提前感谢您的建议。

    2 回复  |  直到 17 年前
        1
  •  2
  •   Fredrik Mörk    17 年前

    Regex.Match不会为您更改字符串;它将简单地匹配它。如果您有一个电话号码字符串,并希望通过删除不需要的字符对其进行格式化,则需要使用Regex.Replace方法:

    // pattern for matching anything that is not '+' or a decimal digit
    string replaceRegex = @"[^+\d]";
    string formated = Regex.Replace("+48 123 234 344", replaceRegex, string.Empty);
    

    在我的示例中,电话号码是硬编码的,但它只是用于演示目的。

    作为旁注;上面代码示例中的正则表达式假设国家代码为2位数字;情况可能并非如此。美国有一个一位数的代码(1),许多国家有三位数的代码(也许还有一些国家的数字比这还要多?)。

        2
  •  0
  •   Rashmi Pandit    17 年前

    这应该起作用:

    Match m = Regex.Match(s, @"^([+]|00)\(?(\d{3})\)?[\s\-]?(\d{3})\-?(\d{4})$");
    return String.Format("{0}{1}{2}{4}", m.Groups[1], m.Groups[2], m.Groups[3], m.Groups[3]);