你認為只有使用正則表達式才有可能嗎?這是我在 Go Playground 上的嘗試這是成功的一些臟代碼http://play.golang.org/p/YysZCB3vlu我想將擴展的韓文字符轉換為完整的字母。例如, “????????????????????????????????????” 到??????????????對于無法正確呈現韓文字符的瀏覽器:? ? ? ? ? ? ? ? ? ? ? ? ? ?簡單的部分是韓語字母只能以一個輔音+一個或兩個元音開頭。這可以用 ( .([?-?])+)來捕捉。具有挑戰性的部分是元音后面的零個或一個或最多兩個可選輔音。難的另一個原因是,在最多兩個可選輔音之后,我們還有另一個不屬于前一個字母的輔音,這個輔音意味著另一個新字母的開始。像下面這樣:??????= ???? + ??= ? + ?= ??可以使用 if 條件和基本正則表達式捕獲所有模式。但如果我有更短的版本就好了。我的最終目標是轉換 “?????????????????????????????????????” 到??????????????對于無法正確呈現韓文字符的瀏覽器:? ? ? ? ? ? ? ? ? ? ? ? ? ?
1 回答

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
我不會韓語,但聽起來您可能的輸入組合是:
C(Consonant) V(Vowel)
CVV
CVVC
CVVCC
CVC
CVCC
因此,捕獲它的正則表達式規則(不捕獲下一個單詞的第一個輔音)是: CV{1,2}C{0,2}(?!V)
然后你只需要定義你的 C 和 V 字符類,比如用 [?-?]
使用您的程序遍歷字符串中找到的匹配項,并輸出組合詞
編輯:Go 不支持負前瞻,因此我建議執行以下操作:
反轉字符串(類似于How to reverse a string in Go?,但要小心 unicode 字節序列)
進行比賽
C{0,2}V{1,2}C
反轉每個匹配并執行單詞 join/lookup
還有其他方法可以解決缺少負前瞻的問題,但它可能會涉及更多代碼來操縱下一個匹配項在輸入字符串中的開始位置。
此外,在定義要查找的元音或輔音字符集時,最好使用 unicode 轉義序列而不是韓語字形本身(通常,例如\x1161
),但我不確定 Go 是否支持 unicode 引用在正則表達式中...
- 1 回答
- 0 關注
- 235 瀏覽
添加回答
舉報
0/150
提交
取消