Verificando se uma string possui números. (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.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , , .