我想解析html文件中的所有链接标记。所以为此我写了以下正则表达式。
var pattern = @"<(LINK).*?HREF=(""|')?(?<URL>.*?)(""|')?.*?>";
var regExOptions = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline;
var linkRegEx = new Regex(pattern , regExOptions );
foreach (Match match in linkRegEx.Matches(htmlFile))
{
var group = match.Groups["URL"];
var url = group.Value;
}
但是我发现从html文件中找到匹配但是我得到了空白捕获组。
答案 0 :(得分:1)
您可以尝试这样的模式:
var pattern = @"<(LINK).*?HREF=(?:([""'])(?<URL>.*?)\2|(?<URL>[^\s>]*)).*?>";
这将匹配:
<
LINK
"
或'
URL
组中捕获的非贪婪任何角色的零个或多个。\2
是后引用)>
之外的任何字符的零个或多个,贪婪地在组URL
中捕获。>
这将正确处理如下输入:
<LINK HREF="Foo">
生成url = "Foo"
<LINK HREF='Bar'>
生成url = "Bar"
<LINK HREF=Baz>
生成url = "Baz"