从网页中解析国际电话号码

时间:2013-03-01 12:57:40

标签: c# regex html-agility-pack phone-number

我正在使用HtmlAgilityPack来解析网页。加载文档后,我想从HTML中提取可能的电话号码。目前,我正在使用一些正则表达式来实现此目的。我有以下代码检查网页中电话号码的匹配

    private static string phoneReg =
                @"[\+]{0,1}(\d{10,13}|[\(][\+]{0,1}\d{2,}[\13)]*\d{5,13}|\d{2,6}[\-]{1}\d{2,13}[\-]*\d{3,13})";
            private static Regex phoneRegex = new Regex(phoneReg, RegexOptions.IgnoreCase);
var phoneMatches = phoneRegex.Matches(doci.DocumentNode.InnerText);

其中doci是html敏捷包的HtmlDocument抽象。问题是它无法匹配某些电话号码,例如08450 211 211+44 (0) 1246 733 000

在抓取网站时是否有最适合的通用正则表达式,并且它允许匹配大多数形式的国际电话号码?

1 个答案:

答案 0 :(得分:1)

您无法匹配这些电话号码(08450 211 211+44 (0) 1246 733 000),因为您的正则表达式与它们不匹配。

编写正则表达式时,您必须要做的第一件事是来识别您想要匹配的模式

所以,我的建议是写下列出不同的电话号码格式更新您的问题,然后我们就能为您提供帮助。否则,我将始终创建一个您的正则表达式可能不匹配的新电话号码,或者它将比您想要的更多匹配。

这是一个与上述电话号码匹配的正则表达式:

(?:\+\d+\s+\(\d+\)\s+)?\d{4,5}\s+\d{3}\s+\d{3}

修改

根据你的评论,我会使用这个正则表达式,然后删除非电话号码的那些:

(?:\+\d+\s+\(\d+\)\s+)?[\d -]+