从网上报废的细胞数量

时间:2014-07-08 09:39:36

标签: c# regex

我是c#.net的新手,我想从网站

创建一个手机号码提取器

如果我有一个像olx.com.pk这样的网站,我想要这样做,我已从中提取了所有链接,并希望从这些链接中提取数字。

我怎么能这样做,我已经完成链接提取非常想了解移动

这是我的链接提取器代码:

 private void button1_Click(object sender, EventArgs e)
    {
        WebBrowser wb = new WebBrowser();
        wb.ScriptErrorsSuppressed = true;
        wb.Url = new Uri(textBox1.Text);
        wb.DocumentCompleted += wb_DocumentCompleted;
    }

    void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlDocument code = ((WebBrowser)sender).Document;
        extract(code);
    }

    private void extract(HtmlDocument code)
    {

        HtmlElementCollection anchorList = code.GetElementsByTagName("a");

        foreach (var item in anchorList)
        {
            listBox1.Items.Add(((HtmlElement)item).GetAttribute("href"));
        }

    }

这是巴基斯坦手机号码的正则表达式。

^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$

1 个答案:

答案 0 :(得分:0)

您已将链接集合部分设置为正确,您现在要做的就是打开每个链接并使用text匹配Matches()

Regex re = new Regex(@"(\+92|0092)-?\d{3}-?\d{7}|\d{11}|\d{4}-\d{7}");

foreach(string link in listBox1.Items){
    // Load data to `HtmlDocument code`
    string text = ((mshtml.IHTMLDocument3)code.DomDocument).documentElement.innerHTML;

    foreach( Match match in re.Matches(text)){
        // do what you need
    }
}

为防止更长的数字匹配,您可以使用negative lookahead/lookbehind expressions

Regex re = new Regex(@"(?<!\d)((\+92|0092)-?\d{3}-?\d{7}|\d{11}|\d{4}-\d{7})(?!\d)");