Removendo caracteres não numéricos de uma string (Python)

Sua aplicação recebe uma string que possui um número, mas a forma da string pode variar. Neste post, mostro como extrair apenas a parte numérica da string.

A primeira coisa que vamos precisar é de realizar uma importação:

import re

 

Agora é só utilizar uma expressão regular para resolver o problema. Qualquer uma das duas tem o mesmo efeito:

  1. “[^0-9]”
  2. “\D”

Lembre-se que regex é case sensitive. \d é diferente de \D!

 

Aplicando o regex:

text = "Out of range value for column 'COL_DA_TABELA' at row 45"
regex_syntax = r"\D"
num_str = re.sub(regex_syntax, "", text)
num = int(num_str)

print(num, type(num))

O que o código acima faz:

  1. Definimos a variável com o texto que vamos analisar;
  2. Definimos a expressão regular;
  3. Extraímos uma string que contém apenas números;
  4. Convertemos esta string em integer;
  5. Exibimos o resultado;

 

Existe um ponto de atenção para esta abordagem: Se a sua string possuir mais de 1 grupo de números, o regex vai retornar uma string com todos eles.

Por exemplo, a string “o número 123 é aleatório, mas quero preciso do número 99”, quando processada pelo regex acima, irá retornar: “12399”.

 

Você pode elaborar a sintaxe da expressão regular, de forma que ela retorne apenas a string com os números que você quer, mas isso vai depender de cada caso.

 

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 , , , .