我想使用正则表达式从字符串中提取 Unicode 字符,从字符串或文本文件中删除 ASCII、数字和特殊符号,是否可以使用正则表达式。例如,我只想要来自新闻文章的文本中的印地语或中文字符。
请您参考如下方法:
如上所述,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")
