Como determinar se uma substring está em uma string diferente

107

Eu tenho uma sub-string:

substring = "please help me out"

Eu tenho outra string:

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

Como faço para saber se substringé um subconjunto do stringuso de Python?

ensolarado
fonte

Respostas:

169

com 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
fonte
10
Deus, python é muito forte, achei que precisava de uma função para fazer isso, mas é um
embutido
Na verdade, eu estava aprendendo JS depois de aprender Python, para isso você precisaria adicionar muitas instruções if else e outras coisas. Então, eu só queria me lembrar de como é feito em Python, essa resposta me fez dizer a mim mesmo 'Claro!' : P
Games Brainiac
@GamesBrainiac Na verdade, para fazer o mesmo em JS é só string.indexOf(substring) != -1, mais aqui
LasagnaAndroid
Depois de descobrir, sim, a substring existe na string, como você descobre em que posição está a string e o que acontece se a substring estiver na string mais de uma vez?
yoshiserry
@yoshiserry se você quiser a posição de substringdentro string, então você quer usar string.index
MarcoS
21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(A propósito - tente não nomear uma variável string, já que existe uma biblioteca padrão do Python com o mesmo nome. Você pode confundir as pessoas se fizer isso em um projeto grande, portanto, evitar colisões como essa é um bom hábito a se adquirir.)

Âmbar
fonte
Não apenas confunda, mas também quebra tudo que faz referência a string após esse ponto.
rplnt,
13

Se você está procurando mais do que Verdadeiro / Falso, seria mais adequado usar o módulo re, como:

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() retornará a string "por favor me ajude".

Ewegesin
fonte
1
Boa dica sobre pesquisas de expressão regular.
Randall Cook
em uma nota mais leve. se você está tentando resolver algo com expressão regular, está tentando resolver dois problemas.
Hasan Iqbal
10

Pensei em adicionar isso caso você esteja pensando em como fazer isso para uma entrevista técnica onde eles não querem que você use a função integrada do Python inou find, o que é horrível, mas acontece:

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
QueenJolene
fonte
2
Belo exemplo, mas sua identificação está incorreta. E para acelerar as coisas, verificaria if len(substring) > len(string) return Falsetambém que o intervalo do loop deve ser melhor range(len(string)-len(substring))porque você não encontrará uma palavra de três letras nas duas últimas letras da string. (Salva algumas iterações).
AnyOneElse
9

As pessoas mencionaram string.find(), string.index()e string.indexOf()nos comentários, e eu os resumi aqui (de acordo com a documentação do Python ):

Em primeiro lugar, não existe um string.indexOf()método. O link postado por Deviljho mostra que esta é uma função JavaScript.

Em segundo lugar, string.find()e string.index()realmente retorna o índice de uma substring. A única diferença é como eles lidam com a situação de substring não encontrada: string.find()retorna -1enquanto string.index()levanta um ValueError.

Samuel Li
fonte
5

Você também pode tentar o método find (). Ele determina se string str ocorre em string ou em uma substring de string.

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
fonte
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
fonte
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
fonte
encontre a substring 'bob' em uma determinada string.
avina k
0

Também pode usar este método

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

insira a descrição da imagem aqui

Em vez de usar find (), uma das maneiras mais fáceis é usar 'in' como acima.

se 'substring' estiver presente em 'str', se parte for executada, caso contrário, a parte será executada.

Dcoder14
fonte