如何指定一系列unicode字符

spi*_*pig 22 python regex unicode

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

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

有没有办法使这个编译或正则表达式我忘记或尚未学习?

Jos*_*Lee 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使它成为一个Unicode文字会导致\u解析,同时只留下其他反斜杠(虽然这不是一个问题),但是领先的零正在弄乱它.语法是\uxxxx\Uxxxxxxxx,所以它解析为" ,".\u00d7ff

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

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

  • 请注意,这个答案是在 Python 2 的上下文中做出的。在 Python 3 中,`r"example"` 和 `ur"example"` 之间没有区别。 (2认同)

rbp*_*rbp 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>
Run Code Online (Sandbox Code Playgroud)

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

  • **完整的Unicode**怎么样?例如,Gothic 块从 U+10330 GOTHIC LETTER AHSA 到 U+1034A GOTHIC LETTER NINE HUNDRED,但还包括接下来的五个代码点,目前未命名?你如何在 Python 中表达其他编程语言允许你使用 `\p{Gothic}`、`\p{Script=Gothic}`、`\p{InGothic}` 或 `\p{Block=Gothic}`为了?例如,在 Perl 中,`/\pN/ &amp;&amp; /\p{InGothic}/` 产生 U+10341 GOTHIC LETTER NINETY 和 U+1034A GOTHIC LETTER NINE HUNDRED。但是,这在 Python 中不起作用;为什么不? (2认同)
  • @tchrist `这在 Python 中不起作用,但是;为什么不呢?` Python `re` 模块从未特别好地处理 Unicode,尽管第三方正则表达式库 (https://pypi.org/project/regex/) 工作正常。 (2认同)