我有一个文本,我想要删除所有非字母数字字符,但保留unicode编码的字符和撇号,因为它是像不是,不能,法国收缩等单词的一部分,我知道我可以做{{ 1}}删除所有非字母数字字符,但我不知道如何保持撇号。显然re.sub(ur'\W', '', text, flags = re.UNICODE)
不起作用,因为它会摆脱unicode编码的字符。有任何想法吗?
答案 0 :(得分:1)
您可以在字符类中使用字符类缩写:
re.sub(ur"[^\w']+", "", text, flags=re.UNICODE)
答案 1 :(得分:0)
除re
和re.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
慢,但我认为我提到完整性。