通过正则表达式查找字符串中的所有电话号码

时间:2014-11-27 14:02:51

标签: c# .net regex

我必须找到一个字符串中的所有电话号码。

我是这样做的(我简化的c#testcode):

const string testString = "+39702937311";

        var m = new Regex("(?<telephonenumber>^\\+?(\\d[\\d-. ]+)?(\\([\\d-. ]+\\))?[\\d-. ]+\\d$)").Matches(testString);

        foreach (Match match in m)
        {
            var nr = match.Groups["telephonenumber"].Value;
            Debug.WriteLine(nr);

            foreach (Capture capture in match.Captures)
            {
                Debug.WriteLine("Index={0}, Value={1}", capture.Index, capture.Value);
            }
        }

它起作用,当字符串本身是电话号码时。但如果字符串是包含电话号码的较长字符串,则它找不到电话号码。

所以,如果我按

进行测试
const string testString = "Hello! This is a telephone number: +39702937311 You should call it";

它没有找到+39702937311作为电话号码。

我该怎么办?谢谢!

1 个答案:

答案 0 :(得分:1)

(?<telephonenumber>^\\+?(\\d[\\d-. ]+)?(\\([\\d-. ]+\\))?[\\d-. ]+\\d$)
                   ^                                                 ^

指示的符号是行边界匹配器。如果你想用这个数学单词,你需要一个单词边界匹配器。

^$替换为\b,表示您希望匹配单词而不是一行。