【问题标题】:retrive the last match case or list with regular expression and than work with it使用正则表达式检索最后一个匹配案例或列表,然后使用它
【发布时间】:2015-09-12 11:05:42
【问题描述】:

我的问题是我会将 html 页面内容下载为字符串

System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString("http://prices.shufersal.co.il/");

并尝试从导航菜单中检索最后一个页面数

<a data-swhglnk=\"true\" href=\"/?page=2\">2</a>

所以最后我想找到最后一个 data-swhglnk 并从中检索最后一页。 我试试

Regex.Match(webData, @"swhglnk", RegexOptions.RightToLeft);

我很乐意了解此类问题的正确方法

【问题讨论】:

  • 使用 htmlagility 包。
  • 当我回到家时,我将展示如何使用 HTML 解析器(如果以前没有人这样做过)。正则表达式的问题在于它效率低下且不安全。尽管在 C# 中可以为它编写一个有效的正则表达式,但非常不鼓励使用正则表达式从 HTML 代码中获取值,并且这样的答案通常被否决。

标签: c# html .net regex


【解决方案1】:

如果你要解析 HTML 并在其中找到一些信息,你应该使用比正则表达式更可靠的方法,即:

-HtmlAgilityPack https://htmlagilitypack.codeplex.com/

-csQueryhttps://github.com/jamietre/CsQuery

对对象进行操作,而不是对字符串进行操作。

更新

如果您决定使用 HtmlAgilityPack,则必须编写如下代码:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(webData);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a[@data-swhglnk]"))
{
    HtmlAttribute data = node.Attributes["data-swhglnk"];
    //do your processing here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多