使用正则表达式从字符串中仅提取Unicode字符

时间:2014-05-13 14:17:03

标签: python regex unicode

我想使用正则表达式从字符串中提取Unicode字符,从字符串或文本文件中删除ASCII,数字和特殊符号,是否可以使用正则表达式。例如,我只想从新闻文章中获取的文字中的印地文或中文字符。

2 个答案:

答案 0 :(得分:2)

如上所述,ASCII是Unicode的一个子集,所以这个问题并不是很有意义。如果您确实要从字符串中删除U+0080下的所有代码点,那很简单:

re.sub(r"[\x00-\x7f]+", "", mystring)

如果您只想保留某些“白名单”字符,则需要准确指定要保留的代码点。

例如,要保留Devanagari代码点(用于编写印地语),您可以使用

re.sub(r"[^\u0900-\u097F]+", "", mystring)

或(Python 2,感谢@bobince单挑!)

re.sub(ur"[^\u0900-\u097F]+", "", mystring)

您确实需要确保使用Unicode字符串,因此不要忘记对输入字符串进行解码/编码:

url = 'http://www.bhaskar.com/'
data = urllib2.urlopen(url).read().decode("utf-8-sig")
regex = re.compile(ur"[^\u0900-\u097F]+")
hindionly = regex.sub("foo", data)
print hindionly.encode("utf-8")

答案 1 :(得分:2)

使用third-party regex module,您可以使用unicode scripts表达模式:

import regex
print(repr(regex.sub(ur'[^\p{Devanagari}\p{Han}]', u'', u'abc123\u0900'))) 
# u'\u0900'