¿Cómo puedo verificar si una cadena solo contiene letras en Python?

Estoy intentando verificar si una cadena solo contiene letras, no dígitos o símbolos.

Por ejemplo:

>>> only_letters("hello") True >>> only_letters("he7lo") False 

Sencillo:

 if string.isalpha(): print("It's all letters") 

str.isalpha() solo es verdadero si todos los caracteres de la cadena son letras:

Devuelva verdadero si todos los caracteres de la cadena son alfabéticos y hay al menos un carácter, de lo contrario, falso.

Manifestación:

 >>> 'hello'.isalpha() True >>> '42hello'.isalpha() False >>> 'hel lo'.isalpha() False 

La función str.isalpha() funciona. es decir.

 if my_string.isalpha(): print('it is letters') 

Para las personas que encuentren esta pregunta a través de Google que quieran saber si una cadena contiene solo un subconjunto de todas las letras, recomiendo usar expresiones regulares:

 import re def only_letters(tested_string): match = re.match("^[ABCDEFGHJKLM]*$", tested_string) return match is not None 

La función string.isalpha() funcionará para ti.

Consulte http://www.tutorialspoint.com/python/string_isalpha.htm

Parece que la gente dice usar str.isalpha .

Esta es la función de una línea para verificar si todos los caracteres son letras.

 def only_letters(string): return all(letter.isalpha() for letter in string) 

all acepta un iterable de booleanos, y devuelve True si todos los booleanos son True .

Más generalmente, all devuelve True si los objetos en su iterable serían considerados True . Estas serían consideradas False

  • 0
  • None
  • Estructuras de datos vacías (es decir, len(list) == 0 )
  • False (duh)

En realidad, ahora estamos en el mundo globalizado del siglo XXI y las personas ya no se comunican utilizando ASCII solo, por lo que cuando responda a la pregunta “¿es solo letras” también debe tener en cuenta las letras de alfabetos que no son ASCII? Python tiene una muy buena biblioteca de Unicodedata que, entre otras cosas, permite la categorización de caracteres Unicode:

 unicodedata.category('陳') 'Lo' unicodedata.category('A') 'Lu' unicodedata.category('1') 'Nd' unicodedata.category('a') 'Ll' 

Las categorías y sus abreviaturas se definen en el estándar de Unicode. Desde aquí puede fácilmente llegar a una función como esta:

 def only_letters(s): for c in s: cat = unicodedata.category(c) if cat not in ('Ll','Lu','Lo'): return False return True 

Y entonces:

 only_letters('Bzdrężyło') True only_letters('He7lo') False 

Como puede ver, las categorías incluidas en la lista blanca pueden ser controladas fácilmente por la tupla dentro de la función. Vea este artículo para una discusión más detallada.

(1) Use str.isalpha () cuando imprima la cadena.

(2) Por favor revise el siguiente progtwig para su referencia:

  str = "this"; # No space & digit in this string print str.isalpha() # it gives return True str = "this is 2"; print str.isalpha() # it gives return False 

Nota: – Verifiqué el ejemplo anterior en Ubuntu.

Puede aprovechar expresiones regulares.

 >>> import re >>> pattern = re.compile("^[a-zA-Z]+$") >>> pattern.match("hello") <_sre.SRE_Match object; span=(0, 5), match='hello'> >>> pattern.match("hel7lo") >>> 

El método match() devolverá un objeto Match si se encuentra una coincidencia. De lo contrario, devolverá None .


Un enfoque más fácil es usar el método .isalpha()

 >>> "Hello".isalpha() True >>> "Hel7lo".isalpha() False 

isalpha() devuelve verdadero si hay al menos 1 carácter en la cadena y si todos los caracteres en la cadena son alfabetos.

Una solución bastante simple que se me ocurrió: (Python 3)

  def only_letters(tested_string): for letter in tested_string: if not letter in "abcdefghjklmnopqrstuvwxyz": return False return True 

Puede agregar un espacio en la cadena que está verificando si desea que se permitan los espacios.