如何编写正则表达式来替换没有链接文本的链接:
<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>";
答案 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?。