Python 删除非拉丁字符
我该怎么从一个字符串中删除所有非拉丁字符呢?更具体一点,有没有办法从unicode数据中找出非拉丁字符?
3 个回答
2
我遇到过类似的问题(Python 3)。你可以试试这样做。
text = u'aweerwq\u0645\u0631\u062d\u0628\u0627\u043c\u0438\u0440'
stripped_text = ''
for c in text:
stripped_text += c if len(c.encode(encoding='utf_8'))==1 else ''
print(stripped_text)
aweerwq
4
为了从一个字符串中去掉非拉丁字符,你可以使用下面的正则表达式来删除所有非ASCII字符:
import re
result = re.sub(r'[^\x00-\x7f]',r'', text)
28
使用第三方的 regex模块,你可以很方便地去掉所有非拉丁字符,方法如下:
import regex
result = regex.sub(ur'[^\p{Latin}]', u'', text)
如果你不想使用regex模块,可以参考这个页面,里面列出了拉丁字符的unicode范围:
\p{InBasic_Latin}: U+0000–U+007F
\p{InLatin-1_Supplement}: U+0080–U+00FF
\p{InLatin_Extended-A}: U+0100–U+017F
\p{InLatin_Extended-B}: U+0180–U+024F
\p{InLatin_Extended_Additional}: U+1E00–U+1EFF
这样你就可以用这些范围来创建一个字符类,使用Python自带的re模块,方法如下:
import re
result = re.sub(ur'[^\x00-\x7F\x80-\xFF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF]', u'', text)
示例:
In [24]: import re
In [25]: import regex
In [35]: text = u'aweerwq\u0645\u0631\u062d\u0628\u0627\u043c\u0438\u0440'
In [36]: print(text)
aweerwqمرحباмир
In [37]: regex.sub(ur'[^\p{Latin}]', u'', text)
Out[37]: u'aweerwq'
In [38]: re.sub(ur'[^\x00-\x7F\x80-\xFF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF]', u'', text)
Out[38]: u'aweerwq'