van*_*udi 5 python regex unicode internationalization
上下文:以下表达式是为泰米尔语文本编写的
\n\'^[\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81]\'是以任一开头的行的预期表达式,\'\xe0\xae\x9a\xe0\xae\xbf\' or \'\xe0\xae\x95\xe0\xaf\x81\'就像英语中如何\'^[ab]\'匹配以任一开头的行一样\'a\' or \'b\'
但由于 Unicode 代表一些具有多个代码点的东方语言\'^[\xe0\xae\x9a,\xe0\xae\xbf,\xe0\xae\x95,\xe0\xaf\x81]\'(为了清楚起见,使用逗号)\xe0\xae\x9a\xe0\xae\xbf -> \xe0\xae\x9a,\xe0\xae\xbf并且\xe0\xae\x95\xe0\xaf\x81 -> \xe0\xae\x95,\xe0\xaf\x81
在 python 中运行几个单词的表达式,给出以下结果(您可以在此处查看完整结果)。
\n注意:使用此表达式可以获得预期结果,\'^(\xe0\xae\x9a\xe0\xae\xbf|\xe0\xae\x95\xe0\xaf\x81)\'但这适用于这种特定情况,但如果我想编写表达式来匹配怎么办\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81\xe0\xae\x95\xe0\xaf\x81\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81?有没有办法使表达式\'^[\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81]+\'匹配\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81\xe0\xae\x95\xe0\xaf\x81\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81?
为了便于使用,我在此处添加了文本示例。
\n预期的:
\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb2\xe0\xaf\x8d\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb4\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb1\xe0\xaf\x88\n\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\xb2\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb1\xe0\xae\xbf\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb0\xe0\xaf\x81\n\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\xb1\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\x9f\xe0\xae\xbf\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\x9f\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xae\xe0\xaf\x88\n\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\xa4\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb2\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb3\xe0\xae\xbf\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb5\xe0\xae\xbf\nRun Code Online (Sandbox Code Playgroud)\n匹配:
\n\xe0\xae\x95\xe0\xae\x9f\xe0\xae\xbf\n\xe0\xae\x95\xe0\xae\xb4\xe0\xae\xbf\n\xe0\xae\x95\xe0\xae\xb2\xe0\xae\xbf\n\xe0\xae\x95\xe0\xae\xb2\xe0\xaf\x88\n\xe0\xae\x95\xe0\xae\xbe\n\xe0\xae\x95\xe0\xaf\x8b\xe0\xae\x9f\xe0\xaf\x81\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb2\xe0\xaf\x8d\n\xe0\xae\x9a\xe0\xaf\x87\xe0\xae\xb0\xe0\xaf\x8d\n\xe0\xae\x9a\xe0\xae\xb0\xe0\xae\xbf\n\xe0\xae\x95\xe0\xaf\x88\n\xe0\xae\x95\xe0\xae\xb0\xe0\xaf\x88\n\xe0\xae\x9a\xe0\xae\xbe\xe0\xae\xaf\xe0\xaf\x8d\n\xe0\xae\x95\xe0\xae\x9f\xe0\xaf\x81\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb4\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb1\xe0\xaf\x88\n\xe0\xae\x95\xe0\xaf\x8b\n\xe0\xae\x9a\xe0\xaf\x81\xe0\xae\xb4\xe0\xae\xbf\nRun Code Online (Sandbox Code Playgroud)\n1 https://gist.github.com/vanangamudi/591e311d709f5d5d6672a34d09b510cc
\nPython 中的字符类仅匹配单个代码单元/点,即可以与\\uXXXX或\\UXXXXXXXX符号匹配的代码单元/点。字符类与字符序列不匹配。分组结构就是为了做到这一点。
您拥有包含多个代码单元的多字节字符,并且它们不能被重写为单个代码点,因此您将始终获得字符类内的字符之间的 OR 行为,如您所描述的:([\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x81]正则表达式引擎[\xe0\xae\x9a,\xe0\xae\xbf\xe0\xae\x95,\xe0\xaf\x81]将匹配类中定义的四个字符之一,而不是两个字符序列中的任何一个。
要匹配字符序列(例如多字节字符中的代码单元),您必须使用分组构造:
\n\xe0\xae\x9a\xe0\xae\xbf|\xe0\xae\x95\xe0\xaf\x81\n(?:\xe0\xae\x9a\xe0\xae\xbf|\xe0\xae\x95\xe0\xaf\x81)\n(\xe0\xae\x9a\xe0\xae\xbf|\xe0\xae\x95\xe0\xaf\x81)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |