Como posso encontrar a primeira ocorrência de uma sub-string em uma string python?


123

Então, se minha string é "o cara é um cara legal".
Eu gostaria de encontrar o primeiro índice de 'cara':

mystring.findfirstindex('dude') # should return 4

Qual é o comando python para isso?
Obrigado.

Respostas:


213

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4

20
Ele retorna -1se não for encontrado
Christophe Roussy

e se eu quiser encontrar a palavra isda frase this is a cool dude? Eu tentei o método find, mas ele retorna o índice 2 em vez de 5. Como faço para isso usando find ()?
Regressor

@ Regressor: observe os limites de expressões regulares e de expressões regulares.
Mechanical_meat

27

Visão geral rápida: indexefind

Ao lado do findmétodo existe também index. finde indexambos se obter o mesmo resultado: o retorno à posição da primeira ocorrência, mas , se nada for encontrado indexvai elevar um ValueErrorpasso que findretorna -1. Speedwise, ambos têm os mesmos resultados de benchmark.

s.find(t)    #returns: -1, or index where t starts in s
s.index(t)   #returns: Same as find, but raises ValueError if t is not in s

Conhecimento adicional: rfinde rindex:

Em geral, encontrar e indexar retornar o menor índice onde o passou-in começa cordas, e rfinde rindexdevolver o maior índice de onde começa A maior parte da cadeia de algoritmos de busca busca de esquerda para a direita , de modo que as funções começando com rindicar que a pesquisa acontece de direito para a esquerda .

Portanto, caso a probabilidade do elemento que você está pesquisando esteja próxima do final do que no início da lista, rfindou rindexseja mais rápida.

s.rfind(t)   #returns: Same as find, but searched right to left
s.rindex(t)  #returns: Same as index, but searches right to left

Fonte: Python: Guia Visual QuickStart, Toby Donaldson


se a string for definida como input_string = "this is a sentence"e se desejarmos encontrar a primeira ocorrência da palavra is, ela funcionará? # first occurence of word in a sentence input_string = "this is a sentence" # return the index of the word matching_word = "is" input_string.find("is")
Regressor

1

implementar isso de maneira algorítmica, não usando nenhuma função embutida em python. Isso pode ser implementado como

def find_pos(string,word):

    for i in range(len(string) - len(word)+1):
        if string[i:i+len(word)] == word:
            return i
    return 'Not Found'

string = "the dude is a cool dude"
word = 'dude1'
print(find_pos(string,word))
# output 4

0
def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'

6
Parece que o seu recuo está desativado e você esqueceu de fechar as aspas. A explicação do seu código e por que ele resolveria o problema também é útil; ver como responder
camille

desculpe eu editá-lo ... meu código encontrar a primeira ocorrência de uma letra na string e retornar seu lugar
Benmadani Yazid 15/01

0

verse = "Se você consegue manter a cabeça quando tudo a seu redor está perdendo a culpa e culpando você, \ nSe você pode confiar em si mesmo quando todos os homens duvidam de você, \ n Mas permita também que eles duvidem; \ nSe você puder espere e não se canse de esperar, \ n Ou sendo enganado, não lide com mentiras, \ ou seja odiado, não deixe de odiar, \ n E, no entanto, não pareça muito bom, nem fale com muita sabedoria : "

enter code here

print(verse)
#1. What is the length of the string variable verse?
verse_length = len(verse)
print("The length of verse is: {}".format(verse_length))
#2. What is the index of the first occurrence of the word 'and' in verse?
index = verse.find("and")
print("The index of the word 'and' in verse is {}".format(index))

Bem-vindo ao Stack Overflow. Você está respondendo a uma pergunta antiga e já respondida (responda com a marca de seleção verde) sem fornecer mais informações ou uma explicação melhor. Então, basicamente, apenas duplica a resposta aceita . Dê uma olhada em Como escrevo uma boa resposta? . (E para referência adicional, veja Como lidar com a limpeza de respostas duplicadas descaradamente tardias ('navegação') em perguntas populares ).
Ivo Mori
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.