我正在尝试捕获正在重复的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
任何想法都赞赏。
答案 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)之外的每个字符。