如何在保持unicode编码的字符和撇号(\')的同时删除非字母数字字符?

时间:2016-12-12 22:53:27

标签: python regex unicode encoding

我有一个文本,我想要删除所有非字母数字字符,但保留unicode编码的字符和撇号,因为它是像不是,不能,法国收缩等单词的一部分,我知道我可以做{{ 1}}删除所有非字母数字字符,但我不知道如何保持撇号。显然re.sub(ur'\W', '', text, flags = re.UNICODE)不起作用,因为它会摆脱unicode编码的字符。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

您可以在字符类中使用字符类缩写:

re.sub(ur"[^\w']+", "", text, flags=re.UNICODE)

答案 1 :(得分:0)

rere.UNICODE之外,如果您正在使用Py2 unicode或Py3 str,谓词函数可识别Unicode类型。所以你可以这样做:

# Py2 (convert text to unicode if it isn't already)
if not isinstance(text, unicode):
    text = text.decode("utf-8")  # Or latin-1; whatever encoding you're implicitly assuming
u''.join(let for let in text if let == u"'" or let.isalnum())

# Py3
''.join(let for let in text if let == "'" or let.isalnum())

这几乎肯定比使用re慢,但我认为我提到完整性。