Python 如何在正则表达式中使用使用多个unicode点的字母表?

Python 如何在正则表达式中使用使用多个unicode点的字母表?,python,regex,unicode,internationalization,Python,Regex,Unicode,Internationalization,上下文:以下表达式是为泰米尔语文本编写的 '^[சிகு]'是以开头的行的预期表达式சி' 或者கு'就像英语中的'^[ab]'如何匹配以'a'或'b'开头的行一样 但是由于Unicode代表了一些东方语言,具有多个代码点^[ச,ி,க,ு]'(为清晰起见使用逗号)சி -> ச,ி和கு -> க,ு 在python中用几个字运行表达式,将得到以下结果(您可以看到完整的结果) 注:使用此表达式可获得预期结果^(சி|கு)'但这适用于这种特定情况,但如果我想编写表达式来匹配சிசிசிகுகு

上下文:以下表达式是为泰米尔语文本编写的

'^[சிகு]'
是以
开头的行的预期表达式சி' 或者கு'
就像英语中的
'^[ab]'
如何匹配以
'a'或'b'开头的行一样

但是由于Unicode代表了一些东方语言,具有多个代码点
^[ச,ி,க,ு]'(为清晰起见使用逗号)
சி -> ச,ி
கு -> க,ு

在python中用几个字运行表达式,将得到以下结果(您可以看到完整的结果)

注:使用此表达式可获得预期结果^(சி|கு)'但这适用于这种特定情况,但如果我想编写表达式来匹配
சிசிசிகுகுசிகு?是否有任何方法可以使表达式<代码>'^[சிகு]+'匹配
சிசிசிகுகுசிகு

为了便于使用,我在这里添加了文本示例

预期:

குல்
குழை
குறை
சிலை
குறி
குரு
சிறை
குடி
குடை
குமை
சிதை
குலை
குளி
குவி
匹配:

கடி
கழி
கலி
கலை
கா
கோடு
குல்
சேர்
சரி
கை
கரை
சாய்
கடு
குழை
குறை
கோ
சுழி

Python中的字符类只匹配单个代码单元/点,即那些可以与
\uxxx
\uxxxxx
符号匹配的字符类。不匹配字符序列。用于匹配字符序列

您有包含多个代码单元的多字节字符,它们不能作为单个代码点重新写入,因此您将始终获得字符类中字符之间的OR行为,如您所述:
[சிகு](正则表达式引擎将其视为
[ச,ிக,ு]
将匹配类中定义的四个字符中的一个,而不是两个字符序列中的任何一个

要匹配字符序列,就像多字节字符中的代码单位一样,必须使用分组结构:


我不是Unicode方面的专家,但你可能需要这样做。请注意:“即使两个Unicode字符串被规范化,并且在人类读者看来是一样的,如果一个有组合字符,另一个没有,它们可能不相等。”在欧洲语言中,我们也有连字(特别是草书),重音字符可以通过两个代码点进行编码。Unicode有一个关于拆分字符、“字形”、单词、行的附件,它并不是那么简单。此外,它取决于语言(不仅仅是脚本)、文本周期(1900年开始的IIRC泰米尔语文本有时使用其他“连字”)(取决于字体)因此,我并不认为正则表达式可以解决这个问题(我倾向于只对计算机内容使用正则表达式,而不是人工生成的文本)。字符类只匹配代码单位,您无法使字符类更匹配,例如整个代码点。您必须在此处使用分组结构。顺便说一句,我10年前致力于本地化到Malayalam。它还有一些疯狂的连字,当时没有人能处理。@vanangamudi:regex是一种古老的语言,经过多次增强s、 我也认为我们需要工具来处理不同的语言,但据我所知,没有真正好的工具,我认为它与正则表达式会有很大的不同。
சி|கு
(?:சி|கு)
(சி|கு)