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

Mah*_*hdi 4 python regex unicode

嗨,我想在以下字符串中对utf-8 Unicode使用正则表达式:

</td><td>???????????????</td><td> 40.00</td>
Run Code Online (Sandbox Code Playgroud)

我要挑选"???????????????",我该怎么做?

我的代码是:

state = re.findall(r'td>...</td',s)
Run Code Online (Sandbox Code Playgroud)

谢谢

Ste*_*ker 5

尝试匹配俄语字符串时,我遇到了类似的情况。对于您的情况,Michele的答案很好。但是,如果要使用诸如\w和的特殊序列\s,则必须进行一些更改。我只是分享一下,希望对其他人有用。

>>> string = u"</td><td>? ????? ?????????</td><td> 40.00</td>"
Run Code Online (Sandbox Code Playgroud)

通过u在引号之前放置一个字符串来使字符串成为Unicode

>>> pattern = re.compile(ur'>([\w\s]+)<', re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

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

(或者,您可以使用本地语言来设置范围。对于俄语,则为[?-??-?],因此:

pattern = re.compile(ur'>([?-??-?\s]+)<')
Run Code Online (Sandbox Code Playgroud)

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

>>> match = pattern.findall(string)
>>> for i in match:
...     print i
... 
? ????? ?????????
Run Code Online (Sandbox Code Playgroud)


Mic*_*olo 3

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

# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

此外,尝试在字符串前添加 ' ur ',使其成为原始字符串 Unicode

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

我还编辑了您的正则表达式以使其匹配。三个点表示“恰好三个字符”,但由于您使用的是 UTF-8(一种多字节编码),因此这可能无法按预期工作。