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