首页 文章

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

提问于
浏览
0

我正在尝试用正则表达式解析电话号码 . 我想用这样的函数得到一个带有电话号码的字符串:

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

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

预期的反应应该是:

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

输出:48123234344

在此先感谢您的任何建议 .

2 回答

  • 2

    这应该工作:

    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]);
    
  • 0

    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),许多国家都有3位数的代码(也许有些国家的数字比这个还多?) .

相关问题