【发布时间】:2017-12-13 09:33:03
【问题描述】:
我有一个充满泰米尔语单词和搜索字符串的网格。我需要通过网格记录实现全词搜索。我正在为这种方法使用 .NET Regex 类。听起来很简单,我以前做的是:
string pattern = @"\b" + searchText + @"\b".
它在拉丁语中按预期工作,但对于泰米尔语,此表达式返回奇怪的结果。我已经阅读了正则表达式中的 Unicode 字符,但这对我来说似乎不太有帮助。我可能需要确定单词边界在哪里找到以及为什么。
例如:
对于"\bஅம்மா\b" 模式正则表达式在
அம்மாவிடம் 和 அம்மாக்கள் 记录,但不在原始 அம்மா 记录中。
【问题讨论】:
-
最后一个字符是 0BBE TAMIL VOWEL SIGN AA,它属于
\p{M}Unicode 类(组合标记)。请改用string pattern = @"(?<!\w)" + searchText + @"(?!\w)"。或者,如果您想在基本字母/变音符号内避免匹配,string pattern = @"(?<![\p{L}\p{M}])" + searchText + @"(?![\p{L}\p{M}])" -
感谢您的建议,但结果是一样的,很遗憾。
-
请提供示例字符串和预期输出。上面的正则表达式only matches
அம்மாas a whole word. -
奇怪的是,一些在线正则表达式测试工具可能会根据模式返回良好的结果,但在应用程序本身中,这是一个持续的失败。我可能应该提到我正在使用 MVS'17 和 .NET Framework 4.6。
-
这是C# demo的链接。