web-dev-qa-db-fra.com

Comment puis-je vérifier si une chaîne contient N'IMPORTE QUELLE lettre de l'alphabet?

Quelle est la meilleure implémentation pure en Python pour vérifier si une chaîne contient N'IMPORTE QUELLE lettre de l'alphabet?

string_1 = "(555).555-5555"
string_2 = "(555) 555 - 5555 ext. 5555

string_1 retournera False sans aucune lettre de l'alphabet et string_2 renverra True pour avoir une lettre.

50
Justin Papez

Regex devrait être une approche rapide:

re.search('[a-zA-Z]', the_string)
88
JBernardo

Que diriez-vous:

>>> string_1 = "(555).555-5555"
>>> string_2 = "(555) 555 - 5555 ext. 5555"
>>> any(c.isalpha() for c in string_1)
False
>>> any(c.isalpha() for c in string_2)
True
54
DSM

Vous pouvez utiliser islower() sur votre chaîne pour voir si elle contient des lettres minuscules (parmi d'autres caractères). or avec isupper() pour vérifier également si contient des lettres majuscules:

ci-dessous: lettres dans la chaîne: test renvoie true

>>> z = "(555) 555 - 5555 ext. 5555"
>>> z.isupper() or z.islower()
True

ci-dessous: pas de lettres dans la chaîne: test renvoie false.

>>> z= "(555).555-5555"
>>> z.isupper() or z.islower()
False
>>> 

Ne pas confondre avec isalpha() qui renvoie True uniquement si tous les caractères sont des lettres, ce qui n'est pas ce que vous voulez.

Notez que Barm - answer complète bien le mien, car le mien ne gère pas bien le cas mélangé.

14

Vous pouvez utiliser une expression régulière comme ceci:

import re

print re.search('[a-zA-Z]+',string)
8
shibly

J'ai aimé la réponse fournie par @ jean-françois-fabre , mais elle est incomplète.
Son approche fonctionnera, mais seulement si le texte contient uniquement des lettres minuscules ou majuscules:

>>> text = "(555).555-5555 extA. 5555"
>>> text.islower()
False
>>> text.isupper()
False

La meilleure approche consiste à commencer par majuscule ou minuscule, puis par vérifier.

>>> string1 = "(555).555-5555 extA. 5555"
>>> string2 = '555 (234) - 123.32   21'

>>> string1.upper().isupper()
True
>>> string2.upper().isupper()
False
4
Barm

Vous pouvez aussi le faire en plus

import re
string='24234ww'
val = re.search('[a-zA-Z]+',string) 
val[0].isalpha() # returns True if the variable is an alphabet
print(val[0]) # this will print the first instance of the matching value

Notez également que si variable val ne renvoie aucun. Cela signifie que la recherche n'a pas trouvé de correspondance 

0
Ronald Saunfe