這里奇怪的小問題,我在孟加拉語中有這個(隨機)句子:"???? ????? ??????, ?????? ??????????? ????????"
我試圖在它上面運行一個正則運算式(使用Python re library
),如下所示:
- ??????(“令牌#4”):
re.search(r"\b??????\b", "???? ????? ??????, ?????? ??????????? ????????") : <re.Match object; span=(19, 25), match='??????'>
- ?????(“令牌#2”):
re.search(r"\b?????\b", "???? ????? ??????, ?????? ??????????? ????????"): None
知道為什么會發生這種情況嗎?
更新(來自下面的答案建議):
- 查看孟加拉語(和其他印度語言)中使用的變音符號
uj5u.com熱心網友回復:
如果您檢查您?????
包含哪些字符(我喜歡使用此服務),您將了解到最后一個字母是U 09BE
?,即屬于Mc(標記,間距組合)Unicode 類別的BENGALI VOWEL SIGNAA
。
請注意,Mc Unicode 類別字符不屬于re
正則運算式中的單詞字符。Pythonre
\w
匹配“ Unicode 字母、表意文字、數字或下劃線”,其中“表意文字”僅指Mn (標記,非間距)Unicode 類別。
正則運算式中的最后一個\b
單詞邊界需要字串的結尾,或者在AA
元音之后立即出現非單詞字符,因為單詞邊界出現在非單詞AA
字符之后。
因此,如果您需要將所有組合標記添加到單詞邊界中,則需要使用解決問題的PyPi 正則運算式庫:
'word' 字符的定義(issue #1693050)
“單詞”字符的定義已針對 Unicode 進行了擴展。它符合 Unicode 規范
http://www.unicode.org/reports/tr29/
。
在線查看Python 演示:
import regex
print( regex.search(r"\b?????\b", "???? ????? ??????, ?????? ??????????? ????????") )
# => <regex.Match object; span=(5, 10), match='?????'>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517295.html