Regex pour trouver des nombres dans un texte

Utilisez /-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g pour trouver toutes les correspondances dans un texte. Chaque exemple ci-dessous est testé avec ce motif, et vous pouvez l'ouvrir dans le testeur de regex avec les échantillons préchargés.

Mis à jour le

/-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g
Ouvrir dans le testeur de regex

Texte d'exemple

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

5 correspondances

3 4.50 -2.5 1,200 12345

Comment fonctionne le motif

PartieSignification
-?Signe moins facultatif
\d{1,3}(?:,\d{3})+Nombres avec séparateurs de milliers, comme 1,200
|\d+Ou chiffres simples
(?:\.\d+)?Partie décimale facultative

Exemples de code

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];

Notes et limites

Supprimez les virgules avant de convertir une correspondance en nombre. Pour les nombres écrits 1.200,50 (allemand et plusieurs autres locales), inversez la virgule et le point dans le motif.

Questions fréquentes

Quelle est la regex pour trouver des nombres dans un texte ?
/-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/g — elle trouve toutes les correspondances dans un texte. Consultez le tableau ci-dessus pour le rôle de chaque partie.
Fonctionne-t-elle en Python et en PHP ?
Oui : les exemples de code ci-dessus utilisent le même motif avec re en Python et les fonctions preg en PHP.
Comment tester cette regex ?
Cliquez sur « Ouvrir dans le testeur de regex » : le motif, les options et le texte d'exemple se chargent automatiquement, et les correspondances se surlignent pendant que vous modifiez.