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?

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

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.)


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".


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

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.


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")

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

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()

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)))

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.