Pular para o conteúdo

Como usar eficientemente a função str.contains em Python?

[

Como confirmar se uma string em Python contém outra string

Se você precisa verificar se uma string contém uma substring, use o operador de pertencimento in do Python. Em Python, essa é a maneira recomendada de confirmar a existência de uma substring em uma string:

raw_file_content = """Hi there and welcome.
This is a special hidden file with a SECRET secret.
I don't want to tell you The Secret,
but I do want to secretly tell you that I have one."""
"secret" in raw_file_content

O operador in dá a você uma maneira rápida e legível de verificar se uma substring está presente em uma string. Você pode perceber que essa linha de código quase se lê como inglês.

Obs: Se você quiser verificar se a substring não está na string, use not in:

"secret" not in raw_file_content

Se a substring “secret” estiver presente em raw_file_content, o operador not in retorna False.

Quando você usa in, a expressão retorna um valor booleano:

  • True se o Python encontrar a substring
  • False se o Python não encontrar a substring

Você pode usar essa sintaxe intuitiva em declarações condicionais para tomar decisões em seu código:

if "secret" in raw_file_content:
print("Encontrou!")

No exemplo acima, você usa o operador de pertencimento para verificar se “secret” é uma substring de raw_file_content. Se for, uma mensagem será impressa no terminal.

Generalize seu teste removendo sensibilidade a maiúsculas e minúsculas

Em alguns casos, você pode querer fazer uma verificação de substring sem levar em conta se a substring está em maiúsculas ou minúsculas. Para isso, você pode transformar tanto a string quanto a substring em letras minúsculas (ou maiúsculas) antes de realizar a comparação.

Por exemplo:

sentence = "The quick brown fox jumps over the lazy dog"
word = "FOX"
# Transforma a string e a substring em letras minúsculas
sentence_lower = sentence.lower()
word_lower = word.lower()
if word_lower in sentence_lower:
print("Encontrado!")

Ao transformar sentence e word em letras minúsculas (sentence_lower e word_lower, respectivamente), você garante que a verificação de substring seja insensível a maiúsculas e minúsculas. Dessa forma, a palavra "FOX" será considerada uma substring da frase "The quick brown fox jumps over the lazy dog".

Saiba mais sobre a substring

Em alguns casos, você pode querer saber a posição exata da substring em uma string, além de saber se ela está presente. Para isso, você pode usar o método find() ou index().

O método find() retorna o índice da primeira ocorrência da substring em uma string ou -1 se a substring não for encontrada. Por exemplo:

sentence = "The quick brown fox jumps over the lazy dog"
word = "fox"
index = sentence.find(word)
if index >= 0:
print(f"A substring '{word}' foi encontrada na posição {index}")
else:
print("A substring não foi encontrada")

O método find() retorna o valor 16, indicando que a primeira ocorrência da substring "fox" começa no índice 16 da string sentence.

Por outro lado, se a substring não estiver presente na string, o método find() retornará -1, indicando que a substring não foi encontrada. Nesse caso, o programa imprimirá a mensagem “A substring não foi encontrada”.

Já o método index() funciona de forma semelhante ao find(), mas se a substring não for encontrada, ele gera uma exceção ValueError. Ou seja, se você usar index() e a substring não estiver presente, um erro será lançado. Para evitar esse erro, você pode utilizá-lo em um bloco try-except. Por exemplo:

sentence = "The quick brown fox jumps over the lazy dog"
word = "fox"
try:
index = sentence.index(word)
print(f"A substring '{word}' foi encontrada na posição {index}")
except ValueError:
print("A substring não foi encontrada")

Encontre uma substring com condições usando regex

Em alguns casos, você pode precisar de mais flexibilidade para encontrar substrings com base em determinadas condições. Para isso, você pode usar expressões regulares (regex).

O módulo re (regex) do Python fornece uma poderosa API para trabalhar com expressões regulares. Você pode usar a função search() para encontrar a primeira ocorrência de uma substring que corresponda a um padrão regex. Por exemplo:

import re
sentence = "The quick brown fox jumps over the lazy dog"
pattern = r"\b\w{5}\b" # Encontra palavras com 5 letras
match = re.search(pattern, sentence)
if match:
print(f"Encontrada palavra com 5 letras: {match.group()}")
else:
print("Palavra não encontrada")

O padrão regex r"\b\w{5}\b" corresponde a palavras com exatamente 5 letras. O método search() retorna um objeto Match que contém informações sobre a correspondência encontrada. É possível acessar a correspondência em si usando o método group(). No exemplo acima, o programa imprime a palavra “quick”, que contém exatamente 5 letras.

Encontre uma substring em uma coluna de um DataFrame pandas

Se você estiver trabalhando com dados tabulares e precisar pesquisar substrings em uma coluna específica, é melhor carregar os dados em um DataFrame pandas e realizar a pesquisa por substrings com o auxílio dessa biblioteca.

Suponha que você tenha um arquivo CSV com uma coluna chamada “Texto” que contém várias frases. Agora, você deseja verificar se uma substring está presente em cada frase dessa coluna. Você pode fazer isso da seguinte maneira:

import pandas as pd
data = pd.read_csv("data.csv") # Carrega os dados do arquivo CSV para o DataFrame
substring = "fox"
# Cria uma nova coluna chamada "Contém_Substring" que indica se a frase contém a substring
data["Contém_Substring"] = data["Texto"].str.contains(substring, case=False)
print(data)

O método str.contains() do DataFrame pandas verifica se cada string de uma coluna contém uma substring específica. Nesse exemplo, uma nova coluna chamada “Contém_Substring” é criada para indicar se a frase contém a substring “fox”. O argumento case=False é usado para fazer a verificação sem levar em conta maiúsculas e minúsculas.

O DataFrame resultante será impresso na saída, mostrando a coluna “Texto” original e a coluna “Contém_Substring” que indica se a substring está presente em cada frase.

Conclusão

Neste tutorial, você aprendeu como verificar se uma string em Python contém uma substring. Usando o operador de pertencimento in, você pode facilmente confirmar a existência de uma substring em uma string. Você também aprendeu como generalizar sua verificação removendo a sensibilidade a maiúsculas e minúsculas.

Além disso, você explorou como encontrar substrings em uma string usando métodos como find(), index(), e expressões regulares com o módulo re. E, por fim, você viu como procurar substrings em colunas de um DataFrame pandas.

Agora que você tem essas ferramentas em mãos, pode manipular e analisar strings em Python de maneira eficaz e performática.