这是代码:
BanglaAlphabet = {
'Consonant' : '[\u0995-\u09B9\u09CE\u09DC-\u09DF]',
'IndependantVowel' : '[\u0985-\u0994]',
'DependantVowel' : '[\u09BE-\u09CC\u09D7]',
'Nukta' : '[\u09BC]'
}
BanglaWordPattern = ur"""(
({DependantVowel}{Nukta}{Consonant}) |
({DependantVowel}{Consonant}) |
{IndependantVowel} |
{Consonant} |
)+""".format(**BanglaAlphabet)
BanglaWordPattern = re.compile(BanglaWordPattern, re.VERBOSE)
匹配是通过以下方式完成的:
re.match(BanglaWordPattern, w[::-1])
这意味着在从右到左匹配时匹配有效的孟加拉语单词。
但是,它会匹配无效的单词,例如 োগাড় 和 িদগ。
可能是什么问题呢?
编辑
在@GarethRees 和@ChrisMorgan 建议的多次更正之后,我最终得到:
bangla_alphabet = dict(
consonant = u'[\u0995-\u09b9\u09ce\u09dc-\u09df]',
independent_vowel = u'[\u0985-\u0994]',
dependent_vowel = u'[\u09be-\u09cc\u09d7]',
dependent_sign = u'[\u0981-\u0983\u09cd]',
virama = u'[\u09cd]'
)
bangla_word_pattern = re.compile(ur'''(?:
{consonant}
({virama}{consonant})?
({virama}{consonant})?
{dependent_vowel}?
{dependent_sign}?
|
{independent_vowel}
{dependent_sign}?
)+
现在的匹配是:
bangla_word_pattern.match(w)
这段代码不仅纠正了错误,而且比以前解释了更多的字符和有效的结构。
我很高兴地报告它按预期工作。因此,此代码现在用作验证孟加拉语单词语法的非常基本的正则表达式。
有几个特殊规则/例外未实施。我将研究这些并将它们逐步添加到这个基本结构中。
许多 ''.format(**bangla_alphabet), re.VERBOSE)
现在的匹配是:
xCodexBlockxPlacexHolderx
这段代码不仅纠正了错误,而且比以前解释了更多的字符和有效的结构。
我很高兴地报告它按预期工作。因此,此代码现在用作验证孟加拉语单词语法的非常基本的正则表达式。
有几个特殊规则/例外未实施。我将研究这些并将它们逐步添加到这个基本结构中。