如何解决正则\p{L}模式无法匹配含组合字符的泰文字符串?
正则表达式匹配泰文姓名失败的问题
我需要检测仅包含Unicode字母的文本(例如各类Unicode语言的人名,不含符号、表情等)。原本认为\p{L}类别能满足需求,但测试泰文字符串时全部失败。我不懂泰语,用ChatGPT生成的几个常见泰语姓名测试,不管是在正则验证工具还是自行编写的C#程序中均匹配失败。
测试程序代码如下:
using System.Text.RegularExpressions; Console.OutputEncoding = System.Text.Encoding.UTF8; string pattern = @"^[\p{L}\s]+$"; string englishText = "Mary"; Console.Write($"{englishText}: "); Console.WriteLine(Regex.IsMatch(englishText, pattern, RegexOptions.IgnoreCase).ToString()); // true string germanText = "RöschenÜmit"; Console.Write($"{germanText}: "); Console.WriteLine(Regex.IsMatch(germanText, pattern, RegexOptions.IgnoreCase).ToString()); // true string thaiText = "อรุณรัตน์"; Console.Write($"{thaiText}: "); Console.WriteLine(Regex.IsMatch(thaiText, pattern, RegexOptions.IgnoreCase).ToString()); // false string japaneseText = "タクミたくみく"; Console.Write($"{japaneseText }: "); Console.WriteLine(Regex.IsMatch(japaneseText, pattern, RegexOptions.IgnoreCase).ToString()); // true
我排查发现:单独测试泰文字符串中的每个字符时,它们都被识别为有效的Unicode字母,但整串匹配却失败。已检查字符串原始值,未发现隐藏字符。
关键提示:泰文字符串包含组合字符,即使视觉上是单个字符(例如由{0e23, 0xe38}组成的"รุ"),也可能导致字母检测失败。
内容的提问来源于stack exchange,提问作者Alek Davis
相关产品推荐
相关产品推荐

