2013-04-10 115 views
0

一些输入到我们的数据库的链接是巨大的,我需要控制它,因为它是打破报告。C#替换锚文本

我需要以编程方式转变:

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

进入

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

我已经调查Regex.Replace,但似乎无法找到一个离它做什么,我需要的货架。

如果不明显,“http://www.thisismylongurl.com”每次都会是一个不同的URL,所以我需要使用Regex而不是固定的字符串替换。

+0

我会使用HTML分析器,而不是tbh。 – Nolonar 2013-04-10 11:38:30

+0

“链接”将为每个网址不变? – 2013-04-10 11:39:52

+0

我的意思是这部分 - “>链接”将相同的所有网址?? – 2013-04-10 11:45:23

回答

0

当 “链接” 在更换不会改变,你可以试试这个

(<\s*a\s+href="[^"]+">)[^<]*(?=</a>) 

$1Link 

更换看到它here on Regexr

\s是匹配空白字符

[^"]是一个否定的字符类,它的任何字符,但"

(?=</a>)是正先行插入,以确保,即</a>是继匹配相匹配。

$1为您提供了第一个捕获组的内容,即第一个打开括号后面的子模式匹配的内容。

+0

或者你可以使用正向lookbehind断言,所以你不需要'$ 1';) – Nolonar 2013-04-10 11:52:12

+0

@Nolonar,你是对的,但.net是唯一接受无限长的lookbehinds的语言。所以我想让它保持更一般。 – stema 2013-04-10 12:08:05

+0

这工作绝对精美。非常感谢你为我节省了很多时间。 – 2013-04-10 13:26:46

0

完美的作品。虽然没有正则表达式参与。

protected void Page_Load(object sender, EventArgs e) 
    { 

     string str1="<a href='http://www.thisismylongurl.com'>http://www.thisismylongurl.com</a>"; 
     int b1 = str1.IndexOf(">"); 
     int b2 = str1.LastIndexOf("<"); 
     str1= str1.Remove(b1+1); 
     int b3 = str1.IndexOf(">"); 
     str1 = str1.Insert(b3+1, "Link"); 
     Response.Write(str1); 
    }