【问题标题】:How can I write a regular expression to capture links with no link text?如何编写正则表达式来捕获没有链接文本的链接?
【发布时间】:2009-05-09 20:27:47
【问题描述】:

如何编写正则表达式来替换没有链接文本的链接:

<a href="http://www.somesite.com"></a>

<a href="http://www.somesite.com">http://www.somesite.com</a>

?

这是我试图捕捉比赛的方法,但它没有捕捉到任何比赛。我做错了什么?

string pattern = "<a\\s+href\\s*=\\s*\"(?<href>.*)\">\\s*</a>";

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    我不会使用正则表达式 - 我会使用 Html Agility Pack 和如下查询:

    foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[.='']")) {
        link.InnerText = link.GetAttribute("href");
    }
    

    【讨论】:

      【解决方案2】:

      我可能是错的,但我认为您只需将href 组中的量词更改为懒惰而不是贪婪。

      string pattern = @"<a\s+href\s*=\s*""(?<href>.*?)"">\s*</a>";
      

      (为了更好的可读性,我还更改了字符串文字的类型以使用@。)

      正则表达式的其余部分似乎对我来说很好。您根本没有捕获任何匹配项让我不这么认为,但其余代码(甚至输入数据 - 您验证了吗?)可能存在问题。

      【讨论】:

        【解决方案3】:

        建议

        string pattern = "(<a\\b[^>]*href=\"([^\"]+)\"[^>]*>)[\\s\\r\\n]*(</a>)";
        

        这种方式还可以在其他地方捕获与它们的href 属性的链接。

        替换为

        "$1$2$3"
        

        通常的警告词:HTML 和正则表达式本质上是不兼容的。小心使用,这可能会爆炸。

        【讨论】:

          【解决方案4】:

          Marc Gravell 有正确的答案,正则表达式根本不擅长解析 HTML(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex? 了解原因)。有关使用各种解析器的示例,请参阅 Can you provide an example of parsing HTML with your favorite parser?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 2010-09-30
            • 2011-01-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多