正则表达式有问题

bva*_*nen 1 c# regex

我是正则表达式的总菜鸟,需要解析一些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)

我知道我可能会离开,但想知道是否有人能够至少引导我朝着正确的方向前进.

Tho*_*que 6

不要将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感到满意,它会非常直观.

  • @bvandrunen:哦,我坚信正则表达式是错误的工具,HTML Agility Pack是正确的,即使对于一项小任务也是如此.我希望更多人能够发布如何使用HTML Agility Pack完成任务的实际示例,而不仅仅是发布链接. (2认同)