xc3 - Detecta cadenas con caracteres no ingleses en Python
python encode utf8 (3)
Si trabaja con cadenas (no objetos Unicode), puede limpiarlo con la traducción y verificar con isalnum()
, lo que es mejor que lanzar excepciones:
import string
def isEnglish(s):
return s.translate(None, string.punctuation).isalnum()
print isEnglish(''slabiky, ale liší se podle významu'')
print isEnglish(''English'')
print isEnglish(''ގެ ފުރަތަމަ ދެ އަކުރު ކަ'')
print isEnglish(''how about this one : 通 asfަ'')
print isEnglish(''?fd4))45s&'')
print isEnglish(''Текст на русском'')
> False
> True
> False
> False
> True
> False
También puedes filtrar caracteres no ascii de la cadena con esta función:
ascii = set(string.printable)
def remove_non_ascii(s):
return filter(lambda x: x in ascii, s)
remove_non_ascii(''slabiky, ale liší se podle významu'')
> slabiky, ale li se podle vznamu
Tengo algunas cadenas que tienen una mezcla de letras en inglés y ninguna en inglés. Por ejemplo:
w=''_1991_اف_جي2''
¿Cómo puedo reconocer estos tipos de cadenas usando Regex o cualquier otro método rápido en Python?
Prefiero no comparar las letras de la cadena una por una con una lista de letras, sino hacerlo de una sola vez y rápidamente.
Solo puede verificar si la cadena se puede codificar solo con caracteres ASCII (que son alfabeto latino + algunos otros caracteres). Si no se puede codificar, entonces tiene los caracteres de algún otro alfabeto.
Tenga en cuenta el comentario # -*- coding: ....
Debería estar allí en la parte superior del archivo de python (de lo contrario, recibiría algún error sobre la codificación)
# -*- coding: utf-8 -*-
def isEnglish(s):
try:
s.encode(encoding=''utf-8'').decode(''ascii'')
except UnicodeDecodeError:
return False
else:
return True
assert not isEnglish(''slabiky, ale liší se podle významu'')
assert isEnglish(''English'')
assert not isEnglish(''ގެ ފުރަތަމަ ދެ އަކުރު ކަ'')
assert not isEnglish(''how about this one : 通 asfަ'')
assert isEnglish(''?fd4))45s&'')
import re
english_check = re.compile(r''[a-z]'')
if english_check.match(w):
print "english",w
else:
print "other:",w