如何在python中使用正则表达式的unicode字符串?

时间:2012-02-25 17:35:33

标签: python regex unicode

您好我想在以下字符串中使用正则表达式unicode utf-8:

</td><td>عـــــــــــادي</td><td> 40.00</td>

我想选择"عـــــــــــادي",我该怎么做?

我的代码是:

state = re.findall(r'td>...</td',s)

由于

2 个答案:

答案 0 :(得分:4)

在尝试匹配俄语字符串时遇到了类似的事情。根据您的情况,Michele的答案很好。但是,如果您想使用\w\s等特殊序列,则必须更改某些内容。我只是分享这个,希望它对其他人有用。

>>> string = u"</td><td>Я люблю мороженое</td><td> 40.00</td>"

通过在引号

之前放置u来使字符串成为unicode
>>> pattern = re.compile(ur'>([\w\s]+)<', re.UNICODE)

将标志设置为unicode,以便它也匹配unicode字符串(请参阅docs)。

(或者,您可以使用当地语言设置范围。对于俄语,这将是[а-яА-Я],所以:

pattern = re.compile(ur'>([а-яА-Я\s]+)<')

在这种情况下,您不必再设置标志,因为您没有使用特殊序列。)

>>> match = pattern.findall(string)
>>> for i in match:
...     print i
... 
Я люблю мороженое

答案 1 :(得分:2)

根据PEP 0264: Defining Python Source Code Encodings,首先你需要通过在第一行添加这样的注释来告诉Python整个源文件是UTF-8编码:

# -*- coding: utf-8 -*-

此外,请尝试在字符串前添加“ ur ”,以便原始 Unicode

state = re.search(ur'td>([^<]+)</td',s)
res = state.group(1)

我还编辑了你的正则表达式以使其匹配。三个点意味着“正好三个字符”,但由于您使用的是UTF-8,这是一个多字节编码,因此可能无法正常工作。

相关问题