RegEx将逗号分隔的数字与可选的小数部分匹配

Ama*_*osh 4 regex actionscript

我有一个正则表达式,它将逗号分隔的数字与给定的多行文本中的可选两位小数部分相匹配.

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

它成功匹配1,12,12.34,12,345.67等字符串.如何修改它以匹配只有小数部分的数字.23

编辑:只是为了澄清 - 我想修改正则表达式,以便匹配12,12.34.34

我正在寻找'独立'有效数字.即,数字字符串,其边界是空格或行/字符串的开头/结尾.

Bar*_*ers 10

这个:

\d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d
Run Code Online (Sandbox Code Playgroud)

匹配以下所有数字:

1
12
.99
12.34 
12,345.67
999,999,999,999,999.99
Run Code Online (Sandbox Code Playgroud)

如果你想排除类似的数字123a(例如街道地址),或123.123(小数点后超过2位数字),请尝试:

(?<=\s|^)(\d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d)(?=\s|$)
Run Code Online (Sandbox Code Playgroud)

一个小小的演示(我猜你正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

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

)
Run Code Online (Sandbox Code Playgroud)

请注意,它会忽略字符串666a666.666

  • 就像那样,没有区别,但在做的时候:`^ a | b $`它匹配字符串开头的`a`或者结尾的`b`.虽然`^(a | b)$`表示:"a"或"b". (2认同)