正则表达式匹配锚与#in href for .NET

时间:2011-03-23 09:36:26

标签: c# .net regex

我正在尝试使用正则表达式匹配和替换锚标签。到目前为止我所拥有的是:

"(<a href=['\"]?([\\w_\\.]*)['\"]?)"

这种方法的问题在于它无法捕获在其值中也具有#的href。我试过了

"(<a href=['\"]?([\\w_\\.#]*)['\"]?)"

"(<a href=['\"]?([\\w_\\.\\#]*)['\"]?)"

没有成功。

我做错了什么?

谢谢

3 个答案:

答案 0 :(得分:3)

我认为问题不在于#(对我来说很好)但缺少其他网址字符,例如-/:

这样的正则表达式怎么样:

<a href=("[^"]+"|'[^']+'|[^ >]+)

注意:如果可能,请使用其他解析DOM方法来获得有效的html。

答案 1 :(得分:1)

<a href=(('|")[^\2]+?\2|[^>]+)

答案 2 :(得分:1)

如果您只想替换锚点部分使用字符串操作。它们更简单,更快捷

var parts = "http://someurl.com#hashpart".Split("#");
// yields "http://someurl.com" and "hashpart" as array.
// you may want to check if the result has length of two
// if it does :
var newUrl = string.Format("{0}#{1}" parts[0], "some replacement for hashpart");

如果您的网址包含多个哈希值,请尝试使用string.Substring在第一个哈希标记处进行拆分。

var url = "http://someurl.com#hash#hashhash";
var hashPos = url.IndexOf("#");
var urlPart = url.Substring(hashPos);
var hashPart = url.Substring(hashPos +1, url.length - hashPos -1);

应该有效,没有经过验证就写完了,也许你必须折腾一些+/- 1以获得合适的位置。