Замените регулярное выражение - несколько символов - PullRequest
5 голосов
/ 22 декабря 2009

У меня есть около 20 символов, которые нужно заменить на другие символы в блоке текста. Есть ли способ сделать это в одном регулярном выражении, и каким будет это регулярное выражение? Или есть более простой способ сделать это в .NET?

Например, отрывок из моей таблицы сопоставления:

œ => oe
ž => z
Ÿ => Y
А => A
А => А
 => A
М => A
А => AE

Ответы [ 3 ]

4 голосов
/ 22 декабря 2009

Если вам действительно нравится делать это в одном регулярном выражении, есть способ сделать это.

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 голосов
/ 22 декабря 2009

Для замены строки, я бы просто перебрал их в вашей таблице сопоставления и использовал string.Replace на них:

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

Не самый производительный, но если у вас не так много строк для прохождения, это должно быть достаточно хорошо:).

0 голосов
/ 22 декабря 2009

Я не знаю простого способа сделать это с помощью регулярных выражений (не уверен, что это возможно), но вот чистый способ сделать это:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...