这里有一个奇怪的小问题,我用孟加拉语写了这个(随机的)句子:"তিনি কবিতা প্রিয়, সুগঠিত স্বাস্থ্যের অধিকারী।"
我试着在它上运行一个正则表达式(使用Python re library
),如下所示:
- সুগঠিত ("token #4") :
re.search(r"\bসুগঠিত\b", "তিনি কবিতা প্রিয়, সুগঠিত স্বাস্থ্যের অধিকারী।") : <re.Match object; span=(19, 25), match='সুগঠিত'>
- কবিতা ("token #2"):
re.search(r"\bকবিতা\b", "তিনি কবিতা প্রিয়, সুগঠিত স্বাস্থ্যের অধিকারী।"): None
你知道为什么会这样吗
更新(来自下面的答案建议):
- 查看孟加拉语(和其他印度语)中使用的变音符号
2条答案
按热度按时间dbf7pr2w1#
如果你检查一下你的
কবিতা
是由什么字符组成的(我喜欢使用这个服务),你会知道最后一个字母是U+09BE
,也就是 BENGALI VOWEL SIGNAA
属于Mc (Mark, spacing combining) Unicode category。注意**Mc Unicode category chars不属于
re
regex中的单词chars。Pythonre
\w
匹配"Unicode letter, ideogram, digit, or underscore",其中“表意文字”仅指Mn (Mark, Nonspacing) Unicode category。regex * 中的最后一个
\b
单词边界要求 * 要么是字符串的结尾,要么是紧接在AA
元音之后的非单词字符,因为单词边界正好出现在非单词AA
字符之后。因此,如果您需要将所有组合标记添加到单词边界中,则需要使用PyPi regex library,其中问题已得到解决:
word字符的定义(issue #1693050)
“word”字符的定义已扩展为Unicode。它符合
http://www.unicode.org/reports/tr29/
的Unicode规范。在线查看Python演示:
qnyhuwrf2#
它对我有效: