2009-12-22 69 views
4

我有20個左右的字符,我需要用文本塊中的各種其他字符替換。有沒有辦法在一個正則表達式中做到這一點,這個正則表達式會是什麼?或者有更簡單的方法來在.NET中做到這一點?正則表達式替換 - 多個字符

例如,來自我的映射表的摘錄是

OE => OE
Z =>ž
Y =>ý
A =>甲
A =>甲
A = >一個
A =>一個
△=> AE

+0

你真的使用Regex.Replace(),或者你可以接受任何解決方案,如與string.replace( 「A」,一個)? – serhio 2009-12-22 15:49:56

回答

0

我不知道一個簡單的方法做使用正則表達式它(不知道這是可能的),但這裏是C EAN辦法做到這一點:

var replaceChars = new Dictionary<string, string> 
        { 
         {"œ", "oe"}, 
         {"ž", "z"} 
        }; 
string s = "ždfasœ"; 

foreach (var c in replaceChars) 
    s = s.Replace(c.Key, c.Value); 

Console.WriteLine(s); 
+0

StringBuilder將是一個更好的解決方案。 – Joe 2009-12-22 18:17:06

0

對於字符串替換,我只是通過這些迭代在映射表,並在他們使用與string.replace:

foreach(var r in replacements.Values) 
{ 
    myString.Replace(r.Key, r); 
} 

不是最高效的,但如果你沒有太多的字符串可以通過它應該足夠好:)。

4

如果你真的想在單個正則表達式中做到這一點,有辦法做到這一點。

Dictionary<string, string> map = new Dictionary<string, string>() { 
    {"œ","oe"}, 
    {"ž", "z"}, 
    {"Ÿ","Y"}, 
    {"À","A"}, 
    {"Á","A"}, 
    {"Â","A"}, 
    {"Ã","A"}, 
    {"Ä","AE"}, 
}; 

string str = "AAAœžŸÀÂÃÄZZZ"; 

Regex r = new Regex(@"[œžŸÀÂÃÄ]"); 

string output = r.Replace(str, (Match m) => map[m.Value]); 

Console.WriteLine(output); 

結果

AAAoezYAAAAEZZZ 
+0

是這個或多或少的資源和耗時的string.replace(「œ」,「oe」)等...? – serhio 2009-12-22 16:02:37

+0

正常字符串替換應該比正則表達式更快 – YOU 2009-12-22 16:07:10