我是正则表达式的总菜鸟,需要解析一些HTML.我正在寻找个别类别.以下是html的样子:
<p>Categories:
<a href="/some/URL/That/I/dont/need">Category1</a> |
<a href="/could/be/another/URL/That/I/dont/need">Category2</a>
</p>
Run Code Online (Sandbox Code Playgroud)
可能有1-5个类别.我需要的是"Category1或Category2等"
这个项目使用Visual Studio 2010在c#中.目前我拥有的是:
private static readonly Regex _categoriesRegex = new Regex("(<p>Categories:)((/w/.?<Categories>.*?).*?)(</p>)", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
Run Code Online (Sandbox Code Playgroud)
我知道我可能会离开,但想知道是否有人能够至少引导我朝着正确的方向前进.
不要将regex用于此类任务,而是使用专用工具.您最好的选择可能是使用HTML Agility Pack.
编辑:这是使用HTML Agility Pack(用LINQPad编写)的一个例子:
void Main()
{
var doc = new HtmlDocument();
doc.Load(@"D:\tmp\foobar.html");
var query =
from p in doc.DocumentNode.Descendants("p")
where p.InnerText.StartsWith("Categories:")
from a in p.Elements("a")
select a.InnerText;
query.Dump();
}
Run Code Online (Sandbox Code Playgroud)
它返回:
Category1
Category2
Run Code Online (Sandbox Code Playgroud)
我应该注意到这是我第一次尝试使用HAP,我很惊喜它是多么容易(编写上面的代码花了大约3分钟).该API与Linq to XML非常相似,如果您对Linq感到满意,它会非常直观.