使用正则表达式获取 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 的标签,在该标签中,我希望获得始终可变的数据。
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
访问该值
.*?
正在阅读下一场比赛的">
"。
如果您不使用"?
",它将搜索文本中">
"的最后一个匹配项。
祝你好运=)