如何指定一系列unicode字符

时间:2010-10-01 01:18:33

标签: python regex unicode

如何指定' '(空格)到\u00D7FF的一系列unicode字符?

我有一个像r'[\u0020-\u00D7FF]'这样的正则表达式,它不会编译说它是一个糟糕的范围。我是Unicode正则表达式的新手,所以我之前没有遇到过这个问题。

有没有办法让这个编译或正则表达式让我忘记或者还没有学到呢?

2 个答案:

答案 0 :(得分:27)

你的unicode范围的语法不符合你的期望。

  1. 原始r''字符串可防止解析\u转义,并且正则表达式引擎不会执行此操作。此集中唯一的范围是[0-\]

    >>> re.compile(r'[\u0020-\u00d7ff]', re.DEBUG)
    in
      literal 117
      literal 48
      literal 48
      literal 50
      range (48, 117)
      literal 48
      literal 48
      literal 100
      literal 55
      literal 102
      literal 102
    
  2. 使其成为Unicode文字causes \u parsing while leaving other backslashes alone(尽管这不是一个问题),但是领先的零正在弄乱它。语法为\uxxxx\Uxxxxxxxx,因此它被解析为“\u00d7ff”。

    >>> re.compile(ur'[\u0020-\u00d7ff]', re.DEBUG)
    in
      range (32, 215)
      literal 102
      literal 102
    
  3. 删除前导零或切换到\U0000d7ff会修复它:

    >>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG)
    in
      range (32, 55295)
    

答案 1 :(得分:5)

如果您使用的是Python 2.x,则应确保指定一个unicode字符串(使用u''或内置的“unicode”):

>>> r = re.compile(u'[\u0020-\uD7FF]')
>>> r.search(u'foo \uD7F0 bar')
<_sre.SRE_Match object at 0xb7084950>
r.search(u' ')
<_sre.SRE_Match object at 0xb7084b48>

使用原始字符串(就像你一样,用r'')给你(“ascii”字符串)由“仰泳”+字母“u”加上数字0加......