Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从网页解析国际电话号码_C#_Regex_Html Agility Pack_Phone Number - Fatal编程技术网

C# 从网页解析国际电话号码

C# 从网页解析国际电话号码,c#,regex,html-agility-pack,phone-number,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})";

我正在使用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
HtmlDocument
对html敏捷包的抽象。问题是它无法匹配某些电话号码,如
08450 211 211
+44(0)1246 733 000


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

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

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

因此,我的建议是写下不同电话号码格式的列表,更新您的问题,然后我们将能够帮助您。否则,我将始终创建一个新的电话号码,您的正则表达式可能不匹配,或者它将只匹配超过您想要的

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

(?:\+\d+\s+\(\d+\)\s+)?\d{4,5}\s+\d{3}\s+\d{3}
(?:\+\d+\s+\(\d+\)\s+)?[\d -]+
编辑:

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

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

您无法匹配这些电话号码(
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 -]+
编辑:

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

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


我已经尝试了许多来自的正则表达式模式,但它们没有达到目的。对不起,这听起来很恶意。(在许多网站上爬行并提取电话号码)。你介意解释一下你为什么这么做吗?这是关于收集我们网站上关于分销商的一些信息。我们只是从db网站上读到了他们的联系方式,我甚至可以设置更多的正则表达式。我已经尝试了许多正则表达式模式,但它们都没有达到目的。对不起,这听起来很恶意。(在许多网站上爬行并提取电话号码)。你介意解释一下你为什么这么做吗?这是关于收集我们网站上关于分销商的一些信息。我们只是从db网站上读到了他们的联系方式,我甚至可以设置更多的正则表达式。我只想一个接一个地匹配他们。如果有人对这个问题有疑问的话,我想从不同分销商的网站上提取电话号码,所以要提供一个精确的数据集是非常困难的。什么,我想要的是一个正则表达式模式,匹配大多数国际电话号码模式。假阳性在某种程度上是可以容忍的。除非他们开始将文本或html声明为电话号码。在分析文档中是否存在电话号码时,添加
^
将强制仅在文档开头进行匹配。类似地,在文档末尾添加
$
将强制仅在文档末尾进行匹配。这是真的还是我误读了正则表达式的含义works@MuhammadAdeelZahid请参阅我的编辑。我认为您可以使用该正则表达式,然后手动删除不正确的数字,因为会有不正确的数字(比如这个日期:
2010-10-10
,等等)。一旦你有了一个长的列表,也许你可以根据它们的格式对数字进行分组,并编写一个更具体的正则表达式。
的含义是什么?:
在正则表达式中?这意味着
不要捕获这个组。它已匹配,但未放置在组列表中。在这种情况下,它可能可以省略。你可以根据你想在每个组中捕获的内容来调整括号。事实上,我想从不同分销商的网站中提取电话号码,因此要获得准确的数据集是非常困难的。什么,我想要的是一个正则表达式模式,匹配大多数国际电话号码模式。假阳性在某种程度上是可以容忍的。除非他们开始将文本或html声明为电话号码。在分析文档中是否存在电话号码时,添加
^
将强制仅在文档开头进行匹配。类似地,在文档末尾添加
$
将强制仅在文档末尾进行匹配。这是真的还是我误读了正则表达式的含义works@MuhammadAdeelZahid请参阅我的编辑。我认为您可以使用该正则表达式,然后手动删除不正确的数字,因为会有不正确的数字(比如这个日期:
2010-10-10
,等等)。一旦你有了一个长的列表,也许你可以根据它们的格式对数字进行分组,并编写一个更具体的正则表达式。
的含义是什么?:
在正则表达式中?这意味着
不要捕获这个组。它已匹配,但未放置在组列表中。在这种情况下,它可能可以省略。可以根据要在每个组中捕获的内容调整括号。