【问题标题】:Python regex is having problems finding a special unicode characterPython 正则表达式在查找特殊 unicode 字符时遇到问题
【发布时间】:2016-09-26 06:16:59
【问题描述】:

我目前正在分析一些旧考试以确定问题的频率(因为许多问题会在今年的考试中重新出现)。我正在使用 pyperclip 获取 re.findall 的输入。

这是我正在使用的正则表达式:pattern = re.compile(ur'\d.[a-zA-Z .,\']+\?', re.UNICODE),这是一个旧考试的示例问题(我试图找到的模式):9. In Wycherley’s The Country Wife, what does Mr. Pinchwife threaten to inscribe on Mrs. Pinchwife’s face with his penknife? 撇号不是我在键盘上可以找到的,并尝试执行代码会导致此错误:

 File "examAnalyzer.py", line 7
    pattern = re.compile(ur'\d.[a-zA-Z .,\Æ]+\?', re.UNICODE)
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x92 in position 0: invalid start byte

我使用的是 Python 2.7.11 和 Anaconda 4.0,Python 文件是使用 VIM 编辑的。

【问题讨论】:

  • 你不能用\u2019吗?顺便说一句,当您需要匹配文字点时,应该转义 .。试试ur'\d\.[a-zA-Z .,\'\u2019]+\?'
  • 你看一下,它完美无瑕!

标签: python regex python-2.7 python-unicode


【解决方案1】:

您可以使用撇号的\u 表示,即\u2019

此外,点应转义以匹配文字点符号。

使用

ur'\d\.[a-zA-Z .,\'\u2019]+\?'
     ^^            ^^^^^^  

如果对符号的十六进制表示有疑问,您可以在r12a >> apps >> Unicode code converter 进行检查。

【讨论】:

    【解决方案2】:

    您的 python 文件已声明文件编码为 utf8,但文件本身以另一种编码保存。

    你应该在第一行给出正确的编码:

    # -*- coding: <correct encoding> -*-
    

    【讨论】:

    • 哪种编码是正确的?我已在此脚本中将 utf-8 声明为编码。
    • @gloriousCatnip:如果您想在脚本中包含 Unicode 文字字符,我建议您使用 UTF-8。在脚本顶部使用有效的 UTF-8 # -*- coding: 指令,以便 Python 解释器知道使用了什么编码(有几种有效的形式,请参阅 PEP 263),并且您还需要告诉您的编辑器/IDE使用 UTF-8。
    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多