Regex para encontrar números em texto

Use /-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g para encontrar todas as ocorrências em um texto. Cada exemplo abaixo foi testado com o padrão, e você pode abri-lo no Testador de Regex com os textos de exemplo já carregados.

Atualizado em

/-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g
Abrir no Testador de Regex

Texto de exemplo

Order 3 items at $4.50 each, save -2.5% on 1,200 units — 12345 in stock.

5 correspondências

3 4.50 -2.5 1,200 12345

Como o padrão funciona

ParteSignificado
-?Sinal de menos opcional
\d{1,3}(?:,\d{3})+Números com separadores de milhar, como 1,200
|\d+Ou apenas dígitos
(?:\.\d+)?Parte decimal opcional

Exemplos de código

JavaScript

const matches = text.match(/-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g) ?? [];

Python

import re

matches = re.findall(r'-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?', text)

PHP

preg_match_all('/-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/', $text, $m);
$matches = $m[0];

Observações e limitações

Remova as vírgulas antes de converter uma correspondência em número. Para números escritos como 1.200,50 (alemão e muitos outros idiomas), troque a vírgula e o ponto no padrão.

Perguntas frequentes

Qual é a regex para encontrar números em texto?
/-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g — ela encontra todas as ocorrências em um texto. Veja a tabela acima para entender o que cada parte faz.
Funciona em Python e PHP?
Sim — os exemplos de código acima usam o mesmo padrão, com re em Python e funções preg em PHP.
Como testo essa regex?
Clique em “Abrir no Testador de Regex” — o padrão, as flags e o texto de exemplo são carregados automaticamente, e as correspondências são destacadas enquanto você edita.