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