提取 HTML 表标题属性值的快速方法是什么,如下所示?
...
<li><a href="/wiki/Proclo" title="Proclo">Proclo</a></li>
<li><a href="/wiki/Proclus" title="Proclus">Proclus</a></li>
<li><a href="/wiki/Ptolemy" title="Ptolemy">Ptolemy</a></li>
<li><a href="/wiki/Pythagoras" title="Pythagoras">Pythagoras</a></li></ul><h3>S</h3>
...
因此它会在每一行的字符串中返回 Proclo、Proclus、Ptolemy、Pythagoras 等。我正在使用 StreamReader 读取文件。我正在使用 C#。
这个 C# 正则表达式将找到所有标题值:
(?<=\btitle=")[^"]*
C#代码是这样的:
Regex regex = new Regex(@"(?<=\btitle="")[^""]*");
Match match = regex.Match(input);
string title = match.Value;
正则表达式使用 Positive Lookbehind 来查找
title
值开始的位置。然后它会匹配所有内容直到结束双引号。
使用下面的正则表达式
title="([^"]+)"
然后使用Groups浏览匹配的元素。
编辑:我修改了正则表达式以涵盖@Staffan Nöteberg 评论中提供的示例
您可以将问题中的数据视为 XML,并使用 LINQ 提取“title”属性的值,从而避免在不适合的情况下使用正则表达式的问题。
using System.Xml.Linq;
//...
string snippet = @"<ul>
<li><a href=""/wiki/Proclo"" title=""Proclo"">Proclo</a></li>
<li><a href=""/wiki/Proclus"" title=""Proclus"">Proclus</a></li>
<li><a href=""/wiki/Ptolemy"" title=""Ptolemy"">Ptolemy</a></li>
<li><a href=""/wiki/Pythagoras"" title=""Pythagoras"">Pythagoras</a></li>
</ul>";
var xe = XElement.Parse(snippet);
var titles = xe.Elements("li").
Elements("a").
Attributes().
Where(at => at.Name == "title").
Select(ttl => ttl.Value);
Console.WriteLine(string.Join("\r\n", titles));
输出:
Proclo
Proclus
Ptolemy
Pythagoras
(我添加了最初的
<ul>
并在</ul>
之后修剪了它。)
改进了处理其他场景的模式:
(?<=\btitle\s*=\s*['""])[^'""]*