Encontrando a enésima ocorrência de uma substring em uma string
Identificar o índice correspondente à n-ésima ocorrência de uma substring é uma tarefa que frequentemente surge em vários cenários de programação. Em Python, não existe uma função integrada projetada especificamente para essa finalidade. No entanto, existem várias abordagens que podem ser empregadas para alcançar esse resultado.
Uma abordagem direta é usar um loop para iterar pela string e contar as ocorrências da substring. O índice inicial é inicializado com o resultado da primeira ocorrência e o loop continua até que a enésima ocorrência seja encontrada.
def find_nth_occurrence(haystack, needle, n):
index = haystack.find(needle)
while index >= 0 and n > 1:
index = haystack.find(needle, index len(needle))
n -= 1
return index
Este método é eficiente e fácil de entender, mas requer várias passagens pela string, o que pode ser demorado para strings grandes.
Outra abordagem mais Pythonica é usar regular expressões. Expressões regulares fornecem uma maneira poderosa e concisa de pesquisar e manipular strings. A função a seguir usa o método re.findall() para encontrar todas as ocorrências da substring e, em seguida, recupera o n-ésimo índice:
import re
def find_nth_occurrence_regex(haystack, needle, n):
occurrences = re.findall(needle, haystack)
if len(occurrences) >= n:
return haystack.index(occurrences[n - 1])
else:
return -1
Este método é mais rápido que a abordagem iterativa para strings grandes, mas requer a importação de um módulo adicional (re). Além disso, pode ser menos legível do que a abordagem iterativa para alguns usuários.
A escolha entre as abordagens iterativa e de expressão regular depende, em última análise, dos requisitos específicos da tarefa em questão. Para strings pequenas, a abordagem iterativa pode ser suficiente, enquanto para strings grandes, a abordagem de expressão regular pode oferecer melhor desempenho.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3