Comment déterminer si une sous-chaîne est dans une chaîne différente

107

J'ai une sous-chaîne:

substring = "please help me out"

J'ai une autre chaîne:

string = "please help me out so that I could solve this"

Comment savoir s'il substrings'agit d'un sous-ensemble de l' stringutilisation de Python?

ensoleillé
la source

Réponses:

169

avec in: substring in string:

>>> substring = "please help me out"
>>> string = "please help me out so that I could solve this"
>>> substring in string
True
MarcoS
la source
10
mon Dieu, python est trop fort, je pensais qu'il avait besoin d'une fonction pour le faire, mais c'est une fonction intégrée Oo
Windound
J'apprenais juste JS après avoir appris Python, pour cela, vous auriez besoin d'ajouter des tas d'instructions if else et d'autres choses. Donc, je voulais juste me rappeler comment c'est fait en Python, cette réponse m'a fait me dire `` Bien sûr! '', Je veux dire que des choses comme celle-ci en Python sont tellement triviales que vous ne leur accordez jamais beaucoup d'attention! : P
Games Brainiac
@GamesBrainiac En fait, pour faire la même chose dans JS, c'est juste string.indexOf(substring) != -1, plus ici
LasagnaAndroid
Une fois que vous avez trouvé, oui la sous-chaîne existe dans la chaîne, comment trouvez-vous à quelle position se trouve la chaîne et que se passe-t-il si la sous-chaîne est dans la chaîne plus d'une fois?
yoshiserry
@yoshiserry si vous voulez la position de substringin string, alors vous voulez utiliser string.index
MarcoS
21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(Au fait, essayez de ne pas nommer une variable string, car il existe une bibliothèque standard Python avec le même nom. Vous pourriez confondre les gens si vous faites cela dans un grand projet, donc éviter les collisions comme celle-là est une bonne habitude à prendre.)

ambre
la source
Non seulement confondre, mais aussi casser tout ce qui fait référence à la chaîne après ce point.
rplnt le
13

Si vous recherchez plus qu'un vrai / faux, vous seriez le mieux placé pour utiliser le module re, comme:

import re
search="please help me out"
fullstring="please help me out so that I could solve this"
s = re.search(search,fullstring)
print(s.group())

s.group() renverra la chaîne "s'il vous plaît aidez-moi".

brebis
la source
1
Bon conseil sur les recherches d'expressions régulières.
Randall Cook
sur une note plus légère. si vous essayez de résoudre quelque chose avec une expression régulière, vous essayez de résoudre deux problèmes.
Hasan Iqbal
10

Je pensais que j'ajouterais ceci au cas où vous cherchiez comment faire cela pour une interview technique où ils ne veulent pas que vous utilisiez la fonction intégrée de Python inou find, ce qui est horrible, mais se produit:

string = "Samantha"
word = "man"

def find_sub_string(word, string):
  len_word = len(word)  #returns 3

  for i in range(len(string)-1):
    if string[i: i + len_word] == word:
  return True

  else:
    return False
ReineJolene
la source
2
Bel exemple, mais votre identification est incorrecte. Et pour accélérer les choses, je vérifierais if len(substring) > len(string) return Falseégalement que la plage de boucles devrait être mieux range(len(string)-len(substring))car vous ne trouverez pas de mot de trois lettres dans les deux dernières lettres de la chaîne. (Enregistre quelques itérations).
AnyOneElse
9

Personnes mentionnées string.find(), string.index()et string.indexOf()dans les commentaires, et je les résume ici (selon la documentation Python ):

Tout d'abord, il n'y a pas de string.indexOf()méthode. Le lien publié par Deviljho montre qu'il s'agit d'une fonction JavaScript.

Ensuite, string.find()et string.index()retourne en fait l'index d'une sous-chaîne. La seule différence est la façon dont ils gèrent la situation de sous-chaîne introuvable: string.find()renvoie -1tandis que string.index()déclenche un ValueError.

Samuel Li
la source
5

Vous pouvez également essayer la méthode find (). Il détermine si la chaîne str apparaît dans la chaîne ou dans une sous-chaîne de chaîne.

str1 = "please help me out so that I could solve this"
str2 = "please help me out"

if (str1.find(str2)>=0):
  print("True")
else:
  print ("False")
Abhishek Gupta
la source
1
In [7]: substring = "please help me out"

In [8]: string = "please help me out so that I could solve this"

In [9]: substring in string
Out[9]: True
Fredrik Pihl
la source
1
def find_substring():
    s = 'bobobnnnnbobmmmbosssbob'
    cnt = 0
    for i in range(len(s)):
        if s[i:i+3] == 'bob':
            cnt += 1
    print 'bob found: ' + str(cnt)
    return cnt

def main():
    print(find_substring())

main()
avina k
la source
trouver la sous-chaîne «bob» dans une chaîne donnée.
avina k
0

Peut également utiliser cette méthode

if substring in string:
    print(string + '\n Yes located at:'.format(string.find(substring)))
jackotonye
la source
0

entrez la description de l'image ici

Au lieu d'utiliser find (), l'un des moyens les plus simples est d'utiliser 'in' comme ci-dessus.

si 'substring' est présent dans 'str' alors si part s'exécutera, sinon part s'exécutera.

Dcoder14
la source