2014-11-23 5 views
12

Ich habe einige Zeichenfolgen, die eine Mischung aus englischen und keinen englischen Buchstaben haben. Zum Beispiel:Erkenne Zeichenfolgen mit nicht englischen Zeichen in Python

w='_1991_اف_جي2' 

Wie kann ich diese Typen von Zeichenfolgen Regex oder eine andere schnelle Methode in Python erkennen?

Ich möchte nicht Buchstaben der Zeichenfolge einzeln mit einer Liste von Buchstaben vergleichen, aber dies auf einmal und schnell zu tun.

+1

nutzen vielleicht das ascii Sortiment seit ascii os nur Englisch Zeichen im Bereich von 0-255 ich glaube – jgr208

+0

Können Sie mir sagen, wie dies in Python zu tun? – TJ1

+0

@ TJ1 Welche Python-Version verwendest du? – thefourtheye

Antwort

24

Sie können nur überprüfen, ob die Zeichenfolge nur mit ASCII-Zeichen (das lateinische Alphabet + einige andere Zeichen) codiert werden kann. Wenn es nicht codiert werden kann, hat es die Zeichen von einem anderen Alphabet.

Beachten Sie den Kommentar # -*- coding: ..... Es sollte an der Spitze der Python-Datei da sein (sonst würden Sie Fehlermeldungen bezüglich Codierung erhalten)

# -*- coding: utf-8 -*- 
def isEnglish(s): 
    try: 
     s.encode(encoding='utf-8').decode('ascii') 
    except UnicodeDecodeError: 
     return False 
    else: 
     return True 

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&') 

Es F, T, F, F, T

+8

Danke für die Antwort. In Python 3 funktionierte das, was du gesagt hast, nicht richtig, kaufe ich, was du vorgeschlagen hast und ersetze 's.decode ('ascii')' mit 'scode ('ascii') und auch 'UnicodeDecodeError' mit' UnicodeEnecodeError' und dann es funktionierte. – TJ1

+1

Ich habe tatsächlich Python2 benutzt, um meinen Code zu testen. Danke für die Verbesserung der Lösung für python3 –

+2

Ich habe diese Antwort bearbeitet, um mit Python 2 und 3 zu arbeiten. –

5

zurückkehren Wenn Sie mit Zeichenketten (nicht Unicode-Objekte) arbeiten, können Sie reinigen mit Übersetzung und überprüfen Sie mit isalnum(), das ist besser als Ausnahmen werfen:

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 

auch können Sie mit dieser Funktion nicht-ASCII-Zeichen aus der Zeichenfolge filtern:

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 
Verwandte Themen