2012-08-31 29 views
-1

這是HTML:正則表達式替換轉義字符c#

<font color="#000fff" size="1" face="Arial">Genuine Windows® 7 Home Premium (64-bit)</font> 

這是我想轉換:

[color="#000fff"]Genuine Windows® 7 Home Premium (64-bit)[/color] 

這是我的嘗試:

var post = Regex.Replace(post, "<font color=\"([a-fA-F0-9\\#]+)\">(.*?)</font>", 
           m => "[color=\"" + m.Groups[1].Value + "\"]" + m.Groups[2].Value + "[/color]"); 

它不匹配。

+1

'[顏色]'==>'[/色]'??? –

回答

5

不,因爲您沒有爲size="1" face="Arial"提供服務。試試這個:

"<font color=\"([a-fA-F0-9\\#]+)\"[^>]*>(.*?)</font>" 

(注:將[^>]*捕捉一切都在開幕字體標記其他)

+0

我的天!我怎麼看不到那部分。謝謝。將在幾分鐘內標記 –

+1

所以經常這麼做 - 一雙新鮮的眼睛,沒有更多... –

1

你的解決方法是:

using System; 
using System.Text.RegularExpressions; 

public class Test 
{ 
    public static void Main() 
    { 
    string post = "<font color=\"#000fff\" size=\"1\" face=\"Arial\">Genuine Windows® 7 Home Premium (64-bit)</font>"; 
    post = Regex.Replace(post, "<font color=\"([a-fA-F0-9\\#]+)\"[^>]*>(.*?)</font>", 
     m => "[color=\"" + m.Groups[1].Value + "\"]" + m.Groups[2].Value + "[/color]"); 
    Console.WriteLine(post); 
    } 
} 

測試此代碼here

-1

更新:修復了性能瓶頸。看到它in action

查找:

<font.*?color="([^"]*)"[^>]*>([^<]*)</font> 

注:這是假定顏色屬性肯定會存在。

替換:

[color=$1]$2[/color] 
+1

由於性能,你應該在正則表達式中使用惰性運算符,只有當你必須,而不是這種情況下,所以你最好留在'[^>] *' –

+0

@Ωmega固定性能bootlenecks。 – mmdemirbas