从下载的html页面获取href url参数的数量?

时间:2010-11-13 16:19:45

标签: c# regex html-parsing

我正在尝试从href中的url参数获取一个ID,如下所示:

<a href="http://www.mysite.com/myitem.php?id=71312">MyItemName</a>

我只想要71312,而且我想尝试使用正则表达式(但如果你有更好的approch,我会很乐意尝试):

        string html,itemID;
        using (var client = new WebClient())
        {
            html = client.DownloadString("http://www.mysite.com/search.php?search_text=" + myItemName);
        }

        string pattern = "<a href=\"http://www.mysite.com/myitem.php?id=(\d+)\">" + myItemName + "</a>";
        Match m = Regex.Match(html, pattern, RegexOptions.IgnoreCase);
        if (m.Success)
        {
            itemID = m.Groups[1].Value;
            MessageBox.Show(itemID);
        }

html示例:

more html body
<h1>Items - List</h1>
<p><a href="http://www.mysite.com/myitem.php?id=12313">MyItemNameTest</a>, <a href="http://www.mysite.com/myitem.php?id=83">MyItemNameTestB</a>, <a href="http://www.mysite.com/myitem.php?id=213784">MYItemNameOther</a></p>

</div>
more html body

2 个答案:

答案 0 :(得分:1)

要显示正则表达式出错的地方:

.?是正则表达式中的特殊字符。 .表示“任何字符”,?表示“前一个表达式的零或一个出现”。因此你的正则表达式无法匹配。此外,您需要在C#中使用逐字字符串(除非您想要转义每个反斜杠):

@"<a href=\"http://www\.mysite\.com/myitem\.php\?id=(\d+)\">" + myItemName + "</a>";

可能会奏效。

尽管如此,除非您正在检查的所有链接都遵循这种格式,否则您可能会遇到问题。通过正则表达式解析HTML会让你感受到Cthulhu的愤怒。这就是在这里运行的噱头。

答案 1 :(得分:0)

使用:

Uri u = new Uri("http://www.mysite.com/myitem.php?id=12313");
string s = u.Query;
HttpUtility.ParseQueryString(s).Get("id");

在变量id中,您有数字。找出函数的其余部分:)