RegEx para combinar números separados por vírgula com parte decimal opcional

Eu tenho um regex que corresponde a números separados por vírgulas com uma parte decimal opcional de dois dígitos em um determinado texto de múltiplas linhas.

/(?<=\s|^)\d{1,3}(,\d{3})*(\.\d{2})?(?=\s|$)/m 

Ele combina seqüências de caracteres como 1, 12, 12.34, 12.345.67 etc com êxito. Como posso modificá-lo para corresponder a um número apenas com a parte decimal, como .23 ?

EDIT: Só para esclarecer – eu gostaria de modificar o regex para que ele corresponda 12 , 12.34 e .34

E eu estou procurando por números válidos ‘stand alone’. ou seja, cadeias numéricas cujos limites são espaço em branco ou início / fim da linha / cadeia.

Este:

 \d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d 

corresponde a todos os números a seguir:

 1 12 .99 12.34 12,345.67 999,999,999,999,999.99 

Se você quiser excluir números como 123a (endereços de rua, por exemplo) ou 123.123 (números com mais de 2 dígitos após o ponto decimal), tente:

 (?<=\s|^)(\d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d)(?=\s|$) 

Um pouco de demonstração (eu acho que você está usando PHP):

 $text = "666a 1 fd 12 dfsa .99 fds 12.34 dfs 12,345.67 er 666.666 er 999,999,999,999,999.99"; $number_regex = "/(?<=\s|^)(?:\d{1,3}(?:,\d{3})*(?:\.\d\d)?|\.\d\d)(?=\s|$)/"; if(preg_match_all($number_regex, $text, $matches)) { print_r($matches); } 

qual produzirá:

 Array ( [0] => Array ( [0] => 1 [1] => 12 [2] => .99 [3] => 12.34 [4] => 12,345.67 [5] => 999,999,999,999,999.99 ) ) 

Observe que ele ignora as strings 666a e 666.666

 /(?<=\s|^)(\d{1,3}(,\d{3})*(\.\d{2})?|\.(\d{2}))(?=\s|$)/m 

Ou tendo em conta alguns países onde. é usado como mil separadores e é usado como um separador decimal

 /(?<=\s|^)(\d{1,3}(,\d{3})*(\.\d{2})?|\d{1,3}(\.\d{3})*(,\d{2})?|\.(\d{2})|,(\d{2}))(?=\s|$)/m 

Regex insano para internacionalização

 /((?<=\s)|(?<=^))(((\d{1,3})((,\d{3})|(\.\d{3}))*(((?<=(,\d{3}))(\.\d{2}))|((?<=(\.\d{3}))(,\d{2}))|((? 

Fósforos

 14.23 14,23 114,114,114.23 114.114.114,23 

Não corresponde

 14. 114,114,114,23 114.114.144.23 , .  

Essa resposta trata com essa questão de maneira mais abrangente.

(@ “^ ((([0-9] +) (. ([0-9] +))?) (\, (([0-9] +) (. ([0-9] +)) ?)) *) $ “)

Isso funciona para números inteiros separados por vírgula ou números decimais separados por vírgula.

Exemplo: cenários felizes: caso 1) 9,10 caso 2) 10,1,11,12,15,15,2 caso 3) 9,8 caso 4) 9

Cenários tristes: caso 1) 2..7 caso 2) 2, 7 caso 3) 2. caso 4) 7, caso 5), caso 6). caso 7) .2 caso 8), 2

    Intereting Posts