1

我正在使用 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);

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

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

4

1 回答 1

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 -]+
于 2013-03-01T20:10:38.100 回答