【问题标题】:Python unicode regex issuePython unicode 正则表达式问题
【发布时间】: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+1F300U+1F5FF 的任何字符”。 ss 包含单个代码点U+1F300,满足要求。
  • 字符类是“或”。 [ax-z] 匹配任何axy z。您的字符类匹配 u' 或 U+1F300 或 U+1F301 或 ... 或 U+1F5FE 或 U+1F5FF。
  • re.UNICODE 只影响\d\s\w 的行为,与正则表达式引擎的Unicode/字节语义无关。

标签: python regex python-2.7 unicode python-unicode


【解决方案1】:

unicode haystack 上执行搜索时使用unicode 模式。

另外,“u'...'”不应该出现在模式中;这些都是 Unicode 字符(在 unicode 中),无论如何都没有。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多