2009-12-22 6 views
4

텍스트 블록의 여러 다른 문자로 바꿀 필요가있는 20 자 정도의 문자가 있습니다. 단일 정규식에서 이것을 수행하는 방법이 있습니까, 그리고이 정규식은 무엇입니까? 또는 .NET에서이 작업을 수행하는 더 쉬운 방법이 있습니까?Regex Replace - Multiple Characters

예를 들어, 내 매핑 테이블로부터 발췌

œ =>이다
Z => Z
Y => Y OE
A =>를
A =>를
A = >은
à = A
A => AE는

+0

당신이 정말 Regex.Replace()를 사용하는 것, 또는하려면 string.replace 등의 모든 솔루션을 받아 들일 수 있습니다 ("A", a)는? – serhio

답변

0

나는 그것이 정규식을 사용 할 수있는 쉬운 방법을 알고 아니에요 여기 (안 그것은 확실히 가능하다)하지만이 CL이다> 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

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

+0

일반 문자열 바꾸기는 정규식보다 빠릅니다. – YOU