2010-04-07 13 views
4
a='1234;5' 
print a.index('s') 

l'erreur est:comment trouver si une chaîne est contenue dans une autre

> "D:\Python25\pythonw.exe" "D:\zjm_code\kml\a.py" 
Traceback (most recent call last): 
    File "D:\zjm_code\kml\a.py", line 4, in <module> 
    print a.index('s') 
ValueError: substring not found 

grâce

+1

Ceci est un doublon d'une autre question: http://stackoverflow.com/questions/3437059/does-python-have-a-string-contains- méthode –

+0

une chaîne dans une autre chaîne? tu l'as dit. ceci est python – joaquin

+0

@Anderson: d'accord, il devrait être fermé comme doublon. – lpapp

Répondre

9

Essayez d'utiliser find() au lieu - cela vous dira où il est dans la chaîne:

a = '1234;5' 
index = a.find('s') 
if index == -1: 
    print "Not found." 
else: 
    print "Found at index", index 

Si vous voulez juste savoir si la chaîne est là-bas, vous pouvez utiliser in:

>>> print 's' in a 
False 
>>> print 's' not in a 
True 
6
print ('s' in a)  # False 
print ('1234' in a) # True 

Utilisez find si vous avez besoin de l'indice aussi bien, mais ne pas vouloir qu'une exception soit soulevée.

print a.find('s') # -1 
print a.find('1234') # 0 
3

vous pouvez utiliser in opérateur si vous voulez juste pour vérifier si une sous-chaîne est une chaîne.

if "s" in mystring: 
    print "do something" 

sinon, vous pouvez utiliser find() et vérifier -1 (Introuvable) ou en utilisant index()

3

str.find() et str.index() sont presque identiques. la plus grande différence est que lorsqu'une chaîne n'est pas trouvée, str.index() renvoie une erreur, comme celle que vous avez, alors que str.find() renvoie -1 comme d'autres l'ont posté.

Il existe 2 méthodes soeurs appelées str.rfind() et str.rindex() qui lancent la recherche depuis la fin de la chaîne et progressent vers le début.

en plus, comme d'autres l'ont déjà montré, l'opérateur in (ainsi que not in) sont parfaitement valables aussi bien.

Enfin, si vous essayez de chercher modèles dans les chaînes, vous pouvez envisager des expressions régulières, même si je pense que trop de gens les utilisent quand ils sont trop. dans d'autres (célèbres) mots, "now you have two problems."

c'est tout autant que toutes les infos que j'ai pour le moment. Cependant, si vous apprenez Python et/ou la programmation d'apprentissage, un exercice très utile que je donne à mes élèves est d'essayer de construire dans le code Python *find() et *index() vous, ou même in et not in (bien que des fonctions). vous aurez une bonne pratique de traverser les cordes, et vous comprendrez mieux comment fonctionnent les méthodes de cordes existantes.

bonne chance!

+0

Regular Expressions a Overkill ?! Pourquoi? Il n'y a probablement pas de moyen plus efficace et plus clair de programmer la plupart des algorithmes de correspondance de chaînes. –

+1

Pour les recherches simples qui peuvent être effectuées avec des outils tels que find() et index(), les expressions régulières ne sont pas un bon choix car elles ont tendance à être difficiles à lire sans une inspection minutieuse. Il est rare de pouvoir survoler une expression rationnelle et de saisir tous les détails de ce qu'elle essaie de faire. Ils peuvent être très efficaces pour des motifs complexes, mais la maintenabilité peut être un problème. –

0

C'est la manière correcte de vérifier si une sous-chaîne est présente dans une chaîne ou non.

mer def (str, str1):

if(str1[0:] in str): 

    return "yes" 
else: 
    return "no" 
print(sea("sahil","ah")) 
Questions connexes