Python删除非拉丁字符

时间:2014-05-15 14:20:12

标签: python string python-2.7 unicode

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

3 个答案:

答案 0 :(得分:19)

使用第三方regex module,您可以使用

删除所有非拉丁字符
import regex
result = regex.sub(ur'[^\p{Latin}]', u'', text)

如果您不想使用正则表达式模块,this page列出拉丁语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的内置模块来构建一个字符类:

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'

答案 1 :(得分:1)

我遇到了类似的问题(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

答案 2 :(得分:0)

为了从字符串中删除非拉丁字符,可以使用以下正则表达式从字符串中删除所有非ASCII字符:

pattern Kelvin :: Float -> Temp
pattern Kelvin kelvin <- Celsius (celsiusToKelvin -> kelvin)
  where Kelvin kelvin =  Celsius (kelvinToCelsius kelvin)

pattern Fahrenheit :: Float -> Temp
pattern Fahrenheit fahrenheit <- Celsius (celsiusToFahrenheit -> fahrenheit)
  where Fahrenheit fahrenheit =  Celsius (fahrenheitToCelsius fahrenheit)