Python 2.7.5中带有Umlauts的正则表达式

Python 2.7.5中带有Umlauts的正则表达式,python,regex,python-2.7,Python,Regex,Python 2.7,为什么我的正则表达式不能工作?我需要使用python 2.7.5。 这是我的表达: pattern = re.compile('\d{4};[a-zA-ZäöüÄÖÜß. -]+;.+') 我正在读一个csv文件。开始时必须有4位数字,直到a,直到第二个必须有来自a-Z、umlauts和的字母,或空格或,然后在第二个之后可以有任何字符 现在我的问题是:在第二个“部分”中,它不接受像äöü或ß这样的词。在第三个“部分”中,我没有指定UMLAUT,它们出现时没有问题 我确实在脚本的开头添加了#-*

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

pattern = re.compile('\d{4};[a-zA-ZäöüÄÖÜß. -]+;.+')
我正在读一个csv文件。开始时必须有4位数字,直到a
,直到第二个
必须有来自a-Z、umlauts和
的字母,或空格或
,然后在第二个
之后可以有任何字符

现在我的问题是:在第二个“部分”中,它不接受像
äöü
ß
这样的词。在第三个“部分”中,我没有指定UMLAUT,它们出现时没有问题


我确实在脚本的开头添加了
#-*-编码:utf-8-*-

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

>>> 'ä'
'\xc3\xa4'
任何超出ASCII字符范围的内容都需要多个字节进行编码

您的字符类现在将匹配0xC3字节或0xA4字节;您的类包含更多字节,它可以匹配
“ä”
,但也可以将任何其他UTF-8字节序列与C3或A4字节匹配

您必须显式地匹配每个UTF-8字节对(这是一个真正的难题),或者首先将数据解码为Unicode字符串并使用Unicode正则表达式:

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

当您使用该正则表达式时,请务必传入Unicode文本

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

>>> 'ä'
'\xc3\xa4'
任何超出ASCII字符范围的内容都需要多个字节进行编码

您的字符类现在将匹配0xC3字节或0xA4字节;您的类包含更多字节,它可以匹配
“ä”
,但也可以将任何其他UTF-8字节序列与C3或A4字节匹配

您必须显式地匹配每个UTF-8字节对(这是一个真正的难题),或者首先将数据解码为Unicode字符串并使用Unicode正则表达式:

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

当你使用正则表达式时,一定要输入Unicode文本

谢谢,伙计,这很有效!!!我已经为这个问题绞尽脑汁好几天了..这不应该是
ru'\d{4}…
(对于原始unicode字符串)?@thebjorn:不一定是;对于相同的结果,原始字符串文字只是不同的语法。在这种情况下,
\d
将保留结果值中的
\d
。Python3中没有
ru
前缀,因此对于多语言代码(需要在Python2和Python上运行的代码),我倾向于不使用该前缀。谢谢,这很有效!!!我已经为这个问题绞尽脑汁好几天了..这不应该是
ru'\d{4}…
(对于原始unicode字符串)?@thebjorn:不一定是;对于相同的结果,原始字符串文字只是不同的语法。在这种情况下,
\d
将保留结果值中的
\d
。Python3中没有
ru
前缀,因此对于多语言代码(需要在Python2和Python上运行的代码),我倾向于不使用该前缀。