我正在使用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
。
在抓取网站时是否有最适合的通用正则表达式,并且它允许匹配大多数形式的国际电话号码?
答案 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 -]+