使用正则表达式获取 HTML 标记的变量值

本文关键字:变量值 HTML 正则表达式 获取 | 更新日期: 2023-09-27 18:30:29

我正在尝试在html的某些文本之间获取一个值,到目前为止还没有成功,我不能使用html aglity pack,因为它给出的数据只存在于html标签之间

public static string[] split_comments(string html)
    {
        html = html.ToLower();

        html = html.Replace(@""""," ");

HTML 中的实际行是这样的

<meta itemprop="rating" content="4.7"> the 4.7 value changes every time and I need to get this value

Match match = Regex.Match(html, @"<meta itemprop=rating content=([A-Za-z0-9'-]+)'>$");
            if (match.Success)
            {
                // Finally, we get the Group value and display it.
                string key = match.Groups[1].Value;
            }

所以我正在尝试获取 html 的标签,在该标签中,我希望获得始终可变的数据。

使用正则表达式获取 HTML 标记的变量值

string html = "<meta itemprop='"rating'" content='"4.7'">";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var content = doc.DocumentNode
                .Element("meta")
                .Attributes["content"].Value;

--编辑--

从你第一次接受然后不接受答案,我你拿了代码并使用你的真实html运行,看到它返回了错误的结果。

这并不表明答案不正确,因为它可以与您发布的代码段一起正常工作。

因此,通过进行疯狂猜测并假设您的真实 html 中还有其他具有itemprop属性的 meta 标签,例如

<meta itemprop="rating" content="4.7">
<meta itemprop="somekey" content="somevalue">

代码将是:

var content = doc.DocumentNode
                .Descendants("meta")
                .Where(n => n.Attributes["itemprop"] != null && n.Attributes["itemprop"].Value == "rating")
                .Select(n => n.Attributes["content"].Value)
                .First();

首先,您应该替换它:

html = html.Replace(@""""," ");

有了那个:

html = html.Replace(@"""","");

并通过以下方式更改您的正则表达式:

Match match = Regex.Match(html, @"<meta itemprop=rating content=([A-Za-z0-9'-.]+)'>$");

否则你的 if 将永远是假的。之后,您可以简单地使用子字符串:

 html = html.Substring(html.IndexOf("content=") + 8);
 html = html.Substring(0, html.Length - 1);

我希望这会有所帮助

这里

html = html.Replace(@""""," "); 

将双引号替换为空格。因此,您的示例字符串现在如下所示:

<meta itemprop= rating  content= 4.7 > 

但是,您的正则表达式与没有这些额外空格的文本匹配。此外,您的正则表达式需要在结束>之前使用反斜杠,这在示例中不存在。

你的正则表达式应该是类似 @"'<meta.+?content'='"(.+)'"'>" .尽管使用正则表达式解析 HTLM 是一件坏事。

试试这个:

        double searchedValue;
        Regex reg = new Regex(@"content= (?<groupname>.*?) >");
        var matches = reg.Match(@"<meta itemprop= rating  content= 4.7 >");
        var value = matches.Groups["groupname"].Value;
        //maybe you need to replace like value.Replace('.',',')
        double.TryParse(value , out searchedValue);

(?<groupname> ... )设置一个组。您可以使用 matches.Groups["groupname"].Value 访问该值

.*?正在阅读下一场比赛的">"。

如果您不使用"?",它将搜索文本中">"的最后一个匹配项。

祝你好运=)