如何在Python中的正则表达式中包含非ascii字符

时间:2018-02-14 05:52:27

标签: python regex ascii non-ascii-characters

我有一个文本文件,我正在逐行阅读。在每一行中,如果有特殊字符,那么我将删除特殊字符,为此,我正在使用正则表达式的帮助。

fh = open(r"abc.txt","r+")
    data = fh.read()
    #print re.sub(r'\W+', '', data)
    new_str = re.sub('[^a-zA-Z0-9\n\.;,?!$]', ' ', data)

所以,在我的数据中,我只保留字母数字字和少数特殊符号[。;,?!$],但除此之外我还想要欧元符号(€),磅(£ ),日元(¥)和卢比符号(₹)。但是这些在ASCII字符中不存在,所以当我将它们包含在我的正则表达式中时,如 - re.sub('[^ a-zA-Z0-9 \ n。;,?!$€¥]' ,',数据)它会显示错误消息。 SyntaxError:第23行的文件preprocess.py中的非ASCII字符'\ xe2',但未声明编码

2 个答案:

答案 0 :(得分:0)

您可以使用Unicode character escapes。例如,上面的Euro character可以表示为\u20ac。四位数字是Unicode编号,与编码类型无关。在示例正则表达式中,这可能如下所示:

[^a-zA-Z0-9\u20ac]

答案 1 :(得分:0)

也许不是解决方案,但可能是部分解决方案。将此作为每个Python 2文件的前两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

这使Python 2切换到UTF-8(unicode)模式。在Python 3中,这是默认值。