为什么我的正则表达式不起作用?我需要使用python 2.7.5。 这是我的表达:
pattern = re.compile('\d{4};[a-zA-ZäöüÄÖÜß. -]+;.+')
我正在读一个csv文件。在开始时,必须有4位数字,直到;
,直到第二个;
必须有来自aZ,变音符号和.
或空格或.
的字母,然后在第二个;
之后,可以有任何角色。
现在我的问题:在第二个“部分”中,它不接受äöü
或ß
等变音符号。在我没有指明变音符号的第三个“部分”中,它们出现时没有问题。
我确实将# -*- coding: utf-8 -*-
放在脚本的开头。
答案 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文本