如何编写正则表达式来捕获没有链接文本的链接?

时间:2009-05-09 20:27:47

标签: c# .net regex

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

<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>";

4 个答案:

答案 0 :(得分:8)

我不会使用正则表达式 - 我会使用Html Agility Pack和类似的查询:

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

我建议

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

这种方式还可以捕获其他地方的href属性。

替换为

"$1$2$3"

通常的警告:HTML和正则表达式基本上是不兼容的。请谨慎使用,这可能会爆炸。

答案 3 :(得分:0)

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?