Python 2.7.5中使用元音变换的正则表达式

时间:2016-12-17 18:11:18

标签: python regex python-2.7

为什么我的正则表达式不起作用?我需要使用python 2.7.5。 这是我的表达:

pattern = re.compile('\d{4};[a-zA-ZäöüÄÖÜß. -]+;.+')

我正在读一个csv文件。在开始时,必须有4位数字,直到;,直到第二个;必须有来自aZ,变音符号和.或空格或.的字母,然后在第二个;之后,可以有任何角色。

现在我的问题:在第二个“部分”中,它不接受äöüß等变音符号。在我没有指明变音符号的第三个“部分”中,它们出现时没有问题。

我确实将# -*- coding: utf-8 -*-放在脚本的开头。

1 个答案:

答案 0 :(得分:3)

通过编码为UTF-8,您将多字节序列输入到字符类中:

>>> 'ä'
'\xc3\xa4'

ASCII字符范围之外的任何内容都需要多个字节进行编码。

您的角色类现在将匹配0xC3字节 0xA4字节;您的类包含更多字节,可能匹配'ä'但它也可以匹配任何其他具有C3或A4字节的UTF-8字节序列。

您必须明确匹配每个UTF-8字节对(真正的痛苦),首先将数据解码为Unicode字符串并使用Unicode正则表达式:

re.compile(u'\d{4};[a-zA-ZäöüÄÖÜß. -]+;.+', flags=re.UNICODE)

使用正则表达式

时,请传入Unicode文本