Comment puis-je vérifier si une valeur de chaîne contient des caractères exacts à l'aide de Python2? Plus précisément, je cherche à détecter s’il comporte des signes dollar ("$"), des virgules (",") et des chiffres.
En supposant que votre chaîne est s
:
'$' in s # found
'$' not in s # not found
# original answer given, but less Pythonic than the above...
s.find('$')==-1 # not found
s.find('$')!=-1 # found
Et ainsi de suite pour les autres personnages.
... ou
pattern = re.compile(r'\d\$,')
if pattern.findall(s):
print('Found')
else
print('Not found')
... ou
chars = set('0123456789$,')
if any((c in chars) for c in s):
print('Found')
else:
print('Not Found')
[Edit: a ajouté le '$' in s
réponses]
l'utilisateur Jochen Ritzel a dit ceci dans un commentaire à une réponse de l'utilisateur dappawit à cette question. Cela devrait marcher:
('1' in var) and ('2' in var) and ('3' in var) ...
'1', '2', etc. doivent être remplacés par les caractères que vous recherchez.
Voir cette page dans la documentation Python 2.7 pour obtenir des informations sur les chaînes, notamment sur l'utilisation de l'opérateur in
pour les tests de sous-chaîne.
Mise à jour: Ceci fait le même travail que ma suggestion ci-dessus avec moins de répétition:
# When looking for single characters, this checks for any of the characters...
# ...since strings are collections of characters
any(i in '<string>' for i in '123')
# any(i in 'a' for i in '123') -> False
# any(i in 'b3' for i in '123') -> True
# And when looking for subsrings
any(i in '<string>' for i in ('11','22','33'))
# any(i in 'hello' for i in ('18','36','613')) -> False
# any(i in '613 mitzvahs' for i in ('18','36','613')) ->True
Comparaison rapide des horaires en réponse à l'article d'Abbafei:
import timeit
def func1():
phrase = 'Lucky Dog'
return any(i in 'LD' for i in phrase)
def func2():
phrase = 'Lucky Dog'
if ('L' in phrase) or ('D' in phrase):
return True
else:
return False
if __== '__main__':
func1_time = timeit.timeit(func1, number=100000)
func2_time = timeit.timeit(func2, number=100000)
print('Func1 Time: {0}\nFunc2 Time: {1}'.format(func1_time, func2_time))
Sortie:
Func1 Time: 0.0737484362111
Func2 Time: 0.0125144964371
Le code est donc plus compact avec n’importe lequel, mais plus rapide avec le conditionnel.
Cela permettra de vérifier si les chaînes sont composées d'une combinaison ou de chiffres, du signe dollar et d'une virgule. Est-ce ce que vous cherchez?
import re s1 = 'Chaîne de test' s2 = '1234,12345 $' regex = re. compile ('[0-9, $] + $') if (regex.match (s1)): print "s1 correspond à" sinon : print "s1 ne correspondait pas" if (regex.match (s2)): print "s2 correspondait" else : print "s2 ne correspond pas"