使用正则表达式匹配重复的组

时间:2010-03-15 20:29:53

标签: vb.net visual-studio-2008

我正在尝试捕获正在重复的html页面中的网址,它通常在网址位于不同的行时起作用,但在这种情况下,它们显示在一行和单独的行中。网址有标签: HTTP://东西/简档'> 这是我一直在尝试的

Dim regex As Regex = New Regex( _
                            ".*<a.*href='http://(?<Link>.*?)/profile'>", _
                            RegexOptions.IgnoreCase _
                            Or RegexOptions.CultureInvariant _
                            Or RegexOptions.IgnorePatternWhitespace _
                            Or RegexOptions.Compiled _
                            )


            Dim ms As MatchCollection = regex.Matches(_html)
            Dim url As String = String.Empty
            For Each m As Match In ms
                url = m.Groups("Link").Value.ToLower

任何想法都赞赏。

2 个答案:

答案 0 :(得分:2)

当存在名为HTML Agility Pack的奇妙库时,无需使用正则表达式来尝试解析HTML。这个库可以轻松找到链接,它可以正确处理正则表达式失败的特殊情况。您可以轻松获得更强大的解决方案。

演示库的使用的示例代码是用C#编写的,但希望它能帮助您在VB.NET中构建解决方案:

HtmlDocument doc  = new HtmlDocument();
doc.Load("input.html");
foreach (var link in doc.DocumentNode.Descendants("a"))
{
    string href = link.Attributes["href"].Value;
    Match match = Regex.Match(href, "^http://(?<Link>.*?)/profile$");
    if (match.Success)
    {
        Console.WriteLine(match.Groups["Link"].Value);
    }
}

答案 1 :(得分:1)

您可能需要添加RegexOptions.SingleLine。来自文档:

  

指定单行模式。变化   点(。)的意思所以它   匹配每个字符(而不是   除了\ n)之外的每个字符。