Hi我想在下面的字符串中使用unicode utf-8的正则表达式:
</td><td>عـــــــــــادي</td><td> 40.00</td>
字符串我想把"عـــــــــــادي"取出来,怎么做?我的代码是:
"عـــــــــــادي"
state = re.findall(r'td>...</td',s)
型谢啦,谢啦
0h4hbjxa1#
我在尝试匹配俄语字符串时遇到了类似的东西。对于你的情况,米歇尔的回答很好。如果你想使用特殊的序列,如\w和\s,你必须改变一些东西。我只是分享这个,希望对其他人有用。
\w
\s
>>> string = u"</td><td>Я люблю мороженое</td><td> 40.00</td>"
字符串通过在引号前放置u使字符串变为unicode
u
>>> pattern = re.compile(ur'>([\w\s]+)<', re.UNICODE)
型将标志设置为unicode,这样它也将匹配unicode字符串(参见文档)。(或者,您可以使用本地语言设置范围。对于俄语,这将是[а-яА-Я],因此:
[а-яА-Я]
pattern = re.compile(ur'>([а-яА-Я\s]+)<')
型在这种情况下,您不必再设置标志,因为您没有使用特殊的序列。)
>>> match = pattern.findall(string) >>> for i in match: ... print i ... Я люблю мороженое
型
ercv8c1e2#
根据PEP 0264: Defining Python Source Code Encodings,首先你需要告诉Python整个源文件是UTF-8编码的,方法是在第一行添加这样的注解:
# -*- coding: utf-8 -*-
字符串此外,尝试在字符串之前添加'ur',以便它是**raw* 和 Unicode*:
state = re.search(ur'td>([^<]+)</td',s) res = state.group(1)
型我还编辑了你的正则表达式使其匹配。三个点表示“正好三个字符”,但由于您使用的是UTF-8,这是一种多字节编码,因此可能无法按预期工作。
2条答案
按热度按时间0h4hbjxa1#
我在尝试匹配俄语字符串时遇到了类似的东西。对于你的情况,米歇尔的回答很好。如果你想使用特殊的序列,如
\w
和\s
,你必须改变一些东西。我只是分享这个,希望对其他人有用。字符串
通过在引号前放置
u
使字符串变为unicode型
将标志设置为unicode,这样它也将匹配unicode字符串(参见文档)。
(或者,您可以使用本地语言设置范围。对于俄语,这将是
[а-яА-Я]
,因此:型
在这种情况下,您不必再设置标志,因为您没有使用特殊的序列。)
型
ercv8c1e2#
根据PEP 0264: Defining Python Source Code Encodings,首先你需要告诉Python整个源文件是UTF-8编码的,方法是在第一行添加这样的注解:
字符串
此外,尝试在字符串之前添加'ur',以便它是**raw* 和 Unicode*:
型
我还编辑了你的正则表达式使其匹配。三个点表示“正好三个字符”,但由于您使用的是UTF-8,这是一种多字节编码,因此可能无法按预期工作。