2013-04-10 73 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); 
    }