C# 正则表达式捕获组问题

C# 正则表达式捕获组问题,c#,.net,regex,C#,.net,Regex,我想解析html文件中的所有链接标记。为此,我写了如下正则表达式 var pattern = @"<(LINK).*?HREF=(""|')?(?<URL>.*?)(""|')?.*?>"; var regExOptions = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline; var linkRegEx = new Regex(pattern , regExOptions

我想解析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;
} 
var模式=@”;
var regExOptions=regExOptions.Compiled | regExOptions.IgnoreCase | regExOptions.Multiline;
var linkRegEx=新正则表达式(模式、正则表达式选项);
foreach(linkRegEx.Matches(htmlFile)中的匹配)
{
var group=match.Groups[“URL”];
var url=group.Value;
} 

但实际情况是,我从html文件中找到了匹配项,但我得到的是空白捕获组

您可以尝试以下模式:

var pattern = @"<(LINK).*?HREF=(?:([""'])(?<URL>.*?)\2|(?<URL>[^\s>]*)).*?>";
var模式=@“
,贪婪地,在组
URL
中捕获
  • 任何字符的零个或多个,非贪婪
  • 文字
  • 这将正确处理以下输入:

    • 产生
      url=“Foo”
    • 产生
      url=“Bar”
    • 产生
      url=“Baz”

    为什么不使用一个合适的HTML解析器?或者你可以把你的片段打包在一个HTML框架中,并使用一个合适的HTML解析器,如JeRy建议的。我们不回答的原因是:(?)@ RjdipPaTele,你担心C语言的毫秒性能,而不是使用C++?我开始怀疑你是如何翻新HTML片段的,因为从磁盘或网络流中读取这些数据将使正确的解析器的开销相形见绌。我将留给您Html Agility Pack,或者使用TidyNet将Html转换为xhtml,然后使用.NET xml解析工具。最后一句话:在这种模式中,一个问题是当元素中没有HREF属性时,它会失败。在t time它试图从进一步的子元素解析什么。这是错误的。我尝试使用圆括号创建可选的href属性,如下所示。@“@RajdipPatel您可以发布som示例输入和您想要的输出吗?