Skip to main content
 首页 » 编程设计

c#之解析 .NET 中类似内容的简单正则表达式问题

2024年01月25日25java哥

有没有一种方法可以将所有具有特定域的链接收集到一个字符串中,其中它们只包含以下任一链接:

href="http://yahoo.com/media/news.html" 

或

>http://yahoo.com/media/news.html< 

所以基本上链接要么以href="为前缀并以 " 结尾

或

被 >< 包围的链接.

我尝试使用 Regex ( "href=\"([^\"]*)\"></A>" )但没有匹配到任何东西。

请您参考如下方法:

尝试以下操作:

string[] inputs = { "href=\"http://yahoo.com/media/news.html\"", ">http://yahoo.com/media/news.html<" }; 
 
string pattern = @"(?:href=""|>)(?<Url>http://.+?)[<""]"; 
foreach (string input in inputs) 
{ 
    Match m = Regex.Match(input, pattern); 
    if (m.Success) 
    { 
        Console.WriteLine(m.Groups["Url"].Value); 
    } 
} 

编辑:另一种方法是使用环视,以便匹配但不捕获文本。这允许您直接使用 Match.Value 而不是使用组。请尝试下面的替代方法。

string pattern = @"(?<=href=""|>)http://.+?(?=<|"")"; 
foreach (string input in inputs) 
{ 
    Match m = Regex.Match(input, pattern); 
    if (m.Success) 
    { 
        Console.WriteLine(m.Value); 
    } 
} 

编辑 #2: 根据此处评论中的请求,一种模式将不匹配文本中包含“...”的 URL。

string pattern = @"(?<=href=""|>)http://(?!.*\.{3}).+?(?=<|"")"; 

唯一的变化是添加了 (?!.*\.{3}),这是一个否定的前瞻,如果指定的后缀不存在,则允许模式匹配。在这种情况下,它会检查“...”是否不存在。如果您需要匹配至少 3 个点,请使用 {3,}。