从用户输入,我有一串包含特殊unicode字符的名称。我使用的是Python 2.7。
前:
Panzdella*, Meslone‡, Pezzeella, Rossssi, Pastooori, Perfeetti, D’Erriico†, Puunta*, and d’Ischaia.
我想删除除*和撇号(')之外的所有特殊字符。
这就是我正在做的事情:
import re
authors = raw_input('enter authors to clean characters: ')
# old code authors = re.sub(r'[^a-zA-Z0-9 - \,\*-\u2019]', '', authors)
#new suggestion
authors = re.sub(r'[^a-zA-Z0-9 ,*\u2019-]', '', authors)
print authors
结果不保留卷曲撇号'(u + 2019)。
如何使用正则表达式提供卷曲撇号异常?
答案 0 :(得分:1)
您可以使用:
pressed
确保将连字符保留在字符类的最后或第一个位置。
<强>输出:强>
authors = re.sub(ur'[^a-zA-Z0-9 ,*\u2019-]', '', authors)
示例代码:
Panzdella*, Meslone, Pezzeella, Rossssi, Pastooori, Perfeetti, D’Erriico, Puunta*, and d’Ischaia
答案 1 :(得分:1)
关于您使用的前一种模式的一些注释:
space
+ -
+ space
刚刚匹配空格,因为连字符创建了从空间到空间的范围*-\uXXX
也试图制作一个范围,这不是你想要的。要避免字符类中的文字连字符出现问题,请将它们放在开头或结尾:
[^a-zA-Z0-9 ,*\u2019-]
现在,由于您使用的是Python 2.7,因此字符串是字节数组,为了使用Unicode,它们必须始终转换(en / decode)到/从UTF8转换。
以下是一种使其有效的方法:
# -*- coding: utf-8 -*-
import re
authors = "Panzdella*, Meslone‡, Pezzeella, Rossssi, Pastooori, Perfeetti, D’Erriico†, Puunta*, and d’Ischaia."
authors = re.sub(ur'[^a-zA-Z0-9 ,*\u2019-]', u'', authors.decode('utf8'), 0, re.UNICODE).encode("utf8")
print authors
请参阅IDEONE demo
输出:Panzdella*, Meslone, Pezzeella, Rossssi, Pastooori, Perfeetti, D’Erriico, Puunta*, and d’Ischaia