【发布时间】:2016-01-21 04:13:08
【问题描述】:
为什么会这样:
>>> ss
u'\U0001f300'
>>> r = re.compile(u"[u'\U0001F300-\U0001F5FF']+", re.UNICODE)
>>> r.search(ss) # this works
<_sre.SRE_Match object at 0x7f359acf03d8>
但这不是:
>>> r = re.compile("[u'\U0001F300-\U0001F5FF']+", re.UNICODE)
>>> r.search(ss) # this doesn't
根据 Ignacio 在下面的回答,这也有效:
>>> r = re.compile(u"[\U0001F300-\U0001F5FF]+", re.UNICODE)
>>> r.search(ss)
<_sre.SRE_Match object at 0x7f359acf03d8>
【问题讨论】:
-
字符类中的那些
u'..'没有做任何事情,除了将u包括为合法匹配 - 以及撇号,两次。 -
@MarkReed 我不明白。根据您所说,我的第一场比赛是如何成功的(在我上面的帖子中)?
-
您的第一个匹配项显示:“匹配一个或多个代码点
u、单个撇号以及从U+1F300到U+1F5FF的任何字符”。ss包含单个代码点U+1F300,满足要求。 -
字符类是“或”。
[ax-z]匹配任何a、x、y或z。您的字符类匹配u或'或 U+1F300 或 U+1F301 或 ... 或 U+1F5FE 或 U+1F5FF。 -
re.UNICODE只影响\d、\s、\w的行为,与正则表达式引擎的Unicode/字节语义无关。
标签: python regex python-2.7 unicode python-unicode