Python正则表达式在查找特殊的unicode字符时遇到问题

时间:2016-05-27 20:00:56

标签: python regex python-2.7 python-unicode

我目前正在解析一些旧的考试以确定问题的频率(因为很多问题会在今年的考试中重新出现)。我正在使用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,并且使用VIM编辑Python文件。

2 个答案:

答案 0 :(得分:1)

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

此外,应该对点进行转义以匹配文字点符号。

使用

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

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

答案 1 :(得分:0)

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

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

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