web-dev-qa-db-fra.com

Comment puis-je vérifier si une chaîne ne contient que des lettres en Python?

J'essaie de vérifier si une chaîne ne contient que des lettres, pas des chiffres ou des symboles.

Par exemple:

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

Simple:

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

str.isalpha() n'est vrai que si tous les caractères de la chaîne sont des lettres:

Renvoie true si tous les caractères de la chaîne sont alphabétiques et qu'il y a au moins un caractère, false sinon.

Démo:

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

La fonction str.isalpha() fonctionne. c'est à dire.

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

Pour les personnes qui trouvent cette question via Google et souhaitent savoir si une chaîne de caractères ne contient qu'un sous-ensemble de toutes les lettres, je recommande l'utilisation de regex

import re

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

La fonction string.isalpha() fonctionnera pour vous. 

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

6
Amilcar Andrade

On dirait que les gens disent d'utiliser str.isalpha.

C'est la fonction sur une ligne pour vérifier si tous les caractères sont des lettres.

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

all accepte un nombre itérable de booléens et renvoie True si tous les booléens sont True

Plus généralement, all renvoie True si les objets de votre itérable seraient considérés par True. Celles-ci seraient considérées False

  • None
  • Structures de données vides (c.-à-d. len(list) == 0)
  • False. (duh)
5
hlin117

En fait, nous sommes maintenant dans le monde globalisé du 21ème siècle et les gens ne communiquent plus en utilisant ASCII uniquement. Aussi, lorsque vous répondez à une question sur "est-ce seulement des lettres", vous devez également prendre en compte les lettres provenant d'alphabets non ASCII. Python a une jolie bibliothèque unicodedata qui permet entre autres de catégoriser les caractères Unicode:

unicodedata.category('陳')
'Lo'

unicodedata.category('A')
'Lu'

unicodedata.category('1')
'Nd'

unicodedata.category('a')
'Ll'

Les catégories et leurs abréviations sont définies dans la norme Unicode. À partir de là, vous pouvez très facilement créer une fonction comme celle-ci:

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

Et alors:

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

only_letters('He7lo')
False

Comme vous pouvez le constater, les catégories figurant sur la liste blanche peuvent être assez facilement contrôlées par le tuple situé à l'intérieur de la fonction. Voir cet article pour une discussion plus détaillée.

4
kravietz

(1) Utilisez str.isalpha () lorsque vous imprimez la chaîne.

(2) S'il vous plaît vérifier ci-dessous le programme pour votre référence: -

 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

Note: - J'ai vérifié l'exemple ci-dessus dans Ubuntu.

2
Hemin Patel

Vous pouvez tirer parti des expressions régulières.

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

La méthode match() renverra un objet Match si une correspondance est trouvée. Sinon, il retournera None.


Une approche plus simple consiste à utiliser la méthode .isalpha()

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

isalpha() renvoie true s'il y a au moins 1 caractère dans la chaîne et si tous les caractères de la chaîne sont des alphabets.

0
Shail