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
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
La fonction str.isalpha()
fonctionne. c'est à dire.
if my_string.isalpha():
print('it is letters')
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
La fonction string.isalpha()
fonctionnera pour vous.
Voir http://www.tutorialspoint.com/python/string_isalpha.htm
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
len(list) == 0
)False
. (duh)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.
(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.
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.