2016-09-12 13 views
0

Я пытаюсь заменить строки диакритикой, но не повезло. Мне нужно заменить, например, «Ю» и «ю» на «ю», «Б» и «б» на «б» и т. Д. С моей собственной таблицей. У меня есть такой код, который не работает:regex.replace C# diacritics

case "LastRUEN": 
       if (csentry["LAST"].IsPresent) 
       { 
        string FIELD_RU = csentry["LAST"].Value; 
        string FIELD_EN; 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Аа]", "a"); 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Бб]", "b"); 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Вв]", "v"); 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Гг]", "h"); 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Ґґ]", "g"); 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Дд]", "d"); 
        FIELD_EN = Regex.Replace(FIELD_RU, "[Ее]", "e"); 
        mventry["lastNameEN"].Value = FIELD_EN; 
} 
break; 

Может кто-нибудь ЛФВЭ устранить неполадку? Возможно, было бы лучше использовать метод для моего дела? Спасибо!

+2

Это не диакритика («акценты»), вы, по-видимому, пытаетесь транслитерировать кириллицу на латиницу. – Mat

+0

Зачем вам регулярное выражение? Не можете ли вы просто использовать 'string.Replace()'? – Natrium

+1

Вы продолжаете заменять на 'FIELD_RU', который не изменяется. Это означает, что 'FIELD_EN' будет содержать только последнюю замену. В любом случае, поскольку вы транслитерируете, вы, вероятно, захотите использовать char по char и построить транслитерированную строку на основе некоторого словаря, а не выполнять замену строк в любом случае. – Luaan

ответ

3

Это должно работать лучше, потому что результатом вызовов Replace будет вход следующей операции.

case "LastRUEN": 
      if (csentry["LAST"].IsPresent) 
      { 
       string FIELD_RU = csentry["LAST"].Value; 
       string FIELD_EN; 
       FIELD_EN = Regex.Replace(FIELD_RU, "[Аа]", "a"); 
       FIELD_EN = Regex.Replace(FIELD_EN , "[Бб]", "b"); 
       FIELD_EN = Regex.Replace(FIELD_EN , "[Вв]", "v"); 
       FIELD_EN = Regex.Replace(FIELD_EN , "[Гг]", "h"); 
       FIELD_EN = Regex.Replace(FIELD_EN , "[Ґґ]", "g"); 
       FIELD_EN = Regex.Replace(FIELD_EN , "[Дд]", "d"); 
       FIELD_EN = Regex.Replace(FIELD_EN , "[Ее]", "e"); 
       mventry["lastNameEN"].Value = FIELD_EN; 
} 
break; 

И, конечно, вы должны переместить операции в отдельный метод.

РЕДАКТИРОВАТЬ: Replace Multiple Characters in a String заинтересован в объединении нескольких вызовов.

+0

Спасибо, rboe, это была моя глупая ошибка. – Alex

+0

Без проблем, пожалуйста. –

+0

И если ответ вам помог, пожалуйста, не забудьте отметить его как ответ. –