亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go,正則表達式:非常具有挑戰性的字符正則表達式

Go,正則表達式:非常具有挑戰性的字符正則表達式

Go
Cats萌萌 2021-06-30 09:01:51
你認為只有使用正則表達式才有可能嗎?這是我在 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 不支持負前瞻,因此我建議執行以下操作:

  1. 反轉字符串(類似于How to reverse a string in Go?,但要小心 unicode 字節序列)

  2. 進行比賽 C{0,2}V{1,2}C

  3. 反轉每個匹配并執行單詞 join/lookup

還有其他方法可以解決缺少負前瞻的問題,但它可能會涉及更多代碼來操縱下一個匹配項在輸入字符串中的開始位置。

此外,在定義要查找的元音或輔音字符集時,最好使用 unicode 轉義序列而不是韓語字形本身(通常,例如\x1161),但我不確定 Go 是否支持 unicode 引用在正則表達式中...


查看完整回答
反對 回復 2021-07-05
  • 1 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號