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.