特殊字符串替换功能

时间:2014-06-25 07:21:30

标签: c# regex

我必须用我预先定义的链接替换特定的链接。

string content = @"<html>"
                +" <a href='http://www.yourdomain.com' style='width:10px;'>Click Here</a>"
                +" <br>"
                +" <a href='http://www.yourdomain.com/products/list.aspx' style='width:10px;'>Click Here</a>"
                +" </html>";

要像这样被替换===&gt; "http://www.yourdomain.com""http://www.mydomain.com"

但我不想要以"http://www.yourdomain.com"开头的其他链接被替换。如果这些链接具有子链接(即"/products/list.aspx")。

所以我首先使用C#string.Replace()函数。

string result = content.Replace("http://www.yourdomain.com", "http://www.mydomain.com");

我也尝试Regex.Replace()功能。

string pattern = @"\bhttp://www.yourdomain.com\b";
string replace = "http://www.mydomain.com";
string result = Regex.Replace(content, pattern, replace);

但我得到了同样的结果。如下。

<html> 
<a href='http://www.mydomain.com' style='width:10px;'>Click Here</a> 
<br> 
<a href='http://www.mydomain.com/products/list.aspx' style='width:10px;'>Click Here</a> 
</html>

我想要的是如下。

<html> 
<a href='http://www.mydomain.com' style='width:10px;'>Click Here</a> 
<br> 
<a href='http://www.yourdomain.com/products/list.aspx' style='width:10px;'>Click Here</a> 
</html>

更新

根据@Robin的建议,我的问题已经解决了。

string content = @"<html>"
                    +" <a href='http://www.yourdomain.com' style='width:10px;'>Click Here</a>"
                    +" <br>"
                    +" <a href='http://www.yourdomain.com/products/list.aspx' style='width:10px;'>Click Here</a>"
                    +" </html>";

string pattern = string.Format("{0}(?!/)", "http://www.yourdomain.com");
string replace = "http://www.mydomain.com";
string result = Regex.Replace(content, pattern, replace);

更新

我找到的另一种替代方法是

http://www.yourdomain.com([^/])

2 个答案:

答案 0 :(得分:2)

在替换调用中,在字符串参数的末尾添加'

result = content.Replace("'http://www.yourdomain.com'", "'http://www.mydomain.com'");

这样你只会在没有子链接的情况下替换网址。

答案 1 :(得分:1)

除了dealing with HTML using regex的常规警告外,字母\b在字母(\w)和非字母(\W)之间匹配,因此它匹配在m'之间以及m/之间。

要在网址结尾后明确禁止/您可以使用否定前瞻,请参阅here

 http://www.yourdomain.com(?!/)