我试图获取某些html文本之间的值,到目前为止还没有成功,我不能使用html aglity包,因为它只提供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标签,并且在那个标签中我希望得到的数据始终是可变的。
答案 0 :(得分:4)
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中有其他meta
标记,其中itemprop
属性为
<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();
答案 1 :(得分:2)
首先你应该替换它:
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);
我希望'帮助
答案 2 :(得分:1)
下面
html = html.Replace(@""""," ");
用空格替换双引号。因此,您的示例字符串现在看起来像这样:
<meta itemprop= rating content= 4.7 >
然而,您的正则表达式与没有这些额外空格的文本匹配。此外,正则表达式在结束>
之前需要反斜杠,这在示例中不存在。
答案 3 :(得分:1)
你的正则表达式应该是@"\<meta.+?content\=\"(.+)\"\>"
。虽然用正则表达式解析HTML是件坏事。
答案 4 :(得分:1)
试试这个:
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
.*?
正在阅读“>
”的下一场比赛。
如果您不使用“?
”,它会在您的文字中搜索“>
”的最后一场比赛。
祝你好运=)