2016-09-12 37 views
0

我試圖用符號替換字符串,但沒有運氣。 我需要用我自己的表格替換「Ю」和「ю」到「yu」,「Б」和「б」到「b」等等。 我有這樣的代碼,這是不工作: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; 

任何人可以與HEPL故障? 也許這會更好地使用我的情況下的方法? 謝謝!

+2

這不是變音符號(「口音」),你顯然是試圖將西里爾文音譯爲拉丁文字。 – Mat

+0

爲什麼你需要正則表達式?你不能只使用'string.Replace()'? – Natrium

+1

你不斷更換'FIELD_RU',這是沒有改變。這意味着'FIELD_EN'將只包含最後的替換。在任何情況下,因爲你是音譯的,你可能想要通過字符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

如果答案對您有幫助,請不要忘記標記爲答案。 –