Python删除非拉丁字符

sgp*_*sgp 7 python string unicode python-2.7

如何从字符串中删除所有非拉丁字符?更具体地说,有没有办法从unicode数据中找出非拉丁字符?

unu*_*tbu 20

使用第三方正则表达式模块,您可以删除所有非拉丁字符

import regex
result = regex.sub(ur'[^\p{Latin}]', u'', text)
Run Code Online (Sandbox Code Playgroud)

如果您不想使用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 
Run Code Online (Sandbox Code Playgroud)

所以你可以使用Python的内置模块来形成一个字符类:

import re
result = re.sub(ur'[^\x00-\x7F\x80-\xFF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF]', u'', text) 
Run Code Online (Sandbox Code Playgroud)

演示:

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'
Run Code Online (Sandbox Code Playgroud)

  • @alvas:您可以使用 [`\p{posix_punct}`](https://pypi.python.org/pypi/regex) 来匹配标点符号。它可以与 `\p{Latin}` 结合使用,例如 `regex.match(r'[\p{Latin}\p{posix_punct}]', 'abc?')`。 (2认同)
  • 更正:`regex.match(r'[\ p {Latin} \ p {posix_punct}] +','abc?')`-我缺少加号。 (2认同)
  • 我喜欢你使用 python 正则表达式模块的答案,所以我将其翻译为 Python 3: re.sub(u'[^\\x00-\\x7F\\x80-\\xFF\\u0100-\\u017F\\u0180-\ \u024F\\u1E00-\\u1EFF]',u'',文本) (2认同)