web-dev-qa-db-fra.com

Comment vérifier une chaîne pour des caractères spécifiques?

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.

151
The Woo

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]

234
dappawit

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
20
Abbafei

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.

7
Jesuisme

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" 
3
ajwood