Verificando se uma string possui números. (Python)

Verificando se uma string possui números. (Python)

Overview

Bem-vindo ao mundo da programação em Python! Hoje, vou compartilhar uma dica super útil: como verificar se uma string contém números de maneira simples e eficaz. Vamos explorar juntos duas técnicas poderosas, utilizando funções nativas e expressões regulares. Prepare-se para adicionar mais uma ferramenta ao seu kit de habilidades em Python!

Neste post mostro como uma forma simples de verificar se uma string contém algum número. Obviamente, não é a única forma, mas é esta é bem simples.

Para realizar esta verificação, vamos utilizar duas funções nativas do Python: Any e isdigit (str).

A sintaxe para a verificação é esta:

any(char.isdigit() for char in <string que será verificada>)

Testando esta sintaxe em um console Python:

any(char.isdigit() for char in "String sem números!")
False
any(char.isdigit() for char in "String com 1 número!")
True

Explicando a sintaxe:

  • Neste caso, a função any vai funcionar como se você estivesse fazendo um for, onde cada loop é um caractere da string;
  • Cada caractere será testado para ver se ele é um número (str.isdigit). Se for, a função any retorna True. Sendo assim, qualquer tipo de número (positivo, negativo, inteiro, decimal, etc) vai ser reconhecido.

Imagino que você também não goste de ficar repetindo código por aí. Então podemos encapsular esta sintaxe em uma função:

def tem_numeros(string):
    """Verifica se a string informada possui um número.""""
    return any(char.isdigit() for char in string)

Extra: Alternativa com Regex

Uma alternativa para a abordagem que utilizamos acima é uma expressão regular. O código fica um pouquinho mais complicado (em comparação), mas não o suficiente para inviabilizar.

A sintaxe para verificar com regex é:

bool(re.search(r'\d', <string>))

Testando esta sintaxe em um console Python:

import re
bool(re.search(r'\d', "String sem números!"))
False
bool(re.search(r'\d', "String com 1 número!"))
True

Explicando a sintaxe:

  • re.search vai buscar a expressao (r"\d") na string e retorna um objeto com o resultado se encontrar algo ou None se a expressão não corresponder a qualquer parte da string analisada;
  • bool(<>) vai interpretar o resultado e retornar True se existir alguma coisa ou False se o resultado for None.
  • A expressão \d indica que estamos buscando apenas dígitos, ou seja, qualquer coisa entre 0 e 9, não importando a posição dele na string.

Como você pode perceber, a abordagem é bem parecida, o resultado é o mesmo, mas o regex deixa o processo levemente mais complicado.

Espero ter ajudado.