使用正则表达式从字符串中提取Unicode字符
我想从一个字符串中提取Unicode字符,也就是只保留一些特定的文字,比如印地语或中文,同时去掉ASCII字符、数字和特殊符号。我想知道用正则表达式能不能做到这一点。比如,我只想从新闻文章中提取出印地语或中文的字符。
2 个回答
2
使用这个第三方的正则表达式模块,你可以通过unicode脚本来表达你的匹配模式:
import regex
print(repr(regex.sub(ur'[^\p{Devanagari}\p{Han}]', u'', u'abc123\u0900')))
# u'\u0900'
4
如上所述,ASCII是Unicode的一部分,所以这个问题本身有点不太对劲。如果你真的想从字符串中去掉所有小于U+0080
的字符,那是很简单的:
re.sub(r"[\x00-\x7f]+", "", mystring)
如果你只想保留某些“白名单”中的字符,你需要明确指定要保留哪些字符。
比如,如果你想保留用于书写印地语的天城文字符,可以使用:
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")