我正在寻找一个正则表达式,它将十进制数限制为10,4,但是在整数部分(10)中,我希望它用逗号分隔。
例如-1,123,123,123.1234
这使我接近需要的东西-\ d {0,10}。\ d {4} 但我想在示例中显示逗号。
但是我不确定如何调整它以实现我所需要的吗?
答案 0 :(得分:0)
您应该可以使用以下内容:
(?:\d{1,3}(?:,\d{3}){0,2}|\d(?:,\d{3}){3}|\d{1,10})(?:\.\d{1,4})?
我已经here对其进行了测试。
整个模式是一个整数部分,后跟一个可选的浮动部分。
整数部分(?:\d{1,3}(?:,\d{3}){0,2}|\d(?:,\d{3}){3}|\d{1,10})
是三个子模式之间的替代:
\d{1,3}(?:,\d{3}){0,2}
表示,这是由1到3位数字组成的前导数字组,后面是最多2个正好由3位数字组成的可选组,各组之间用逗号隔开。\d(?:,\d{3}){3}
,其中前导数字组必须恰好包含一位数字,然后是三个三位数字组,各组之间用逗号分隔。\d{1,10}
浮动部分是一个点,后跟至少一个数字,最多四个数字。
请注意,如果您绝对可以避免使用正则表达式,那么这种正则表达式会让维护人员哭泣...
答案 1 :(得分:0)
我不认为您可以使用单个正则表达式来做到这一点
我使用的算法是
,
您现在有了正确格式的字符串。
答案 2 :(得分:0)
以下perl代码使用技巧从右向左工作:
$num = 12345678.01;
$rev = reverse($num);
$rev =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g;
$res = reverse($rev);
print "$res\n";
产生
12,345,678.01
答案 3 :(得分:0)
这可以完成工作:
^(?:\d,)?\d{0,3}(?:,\d{1,3}){0,2}\.\d{4}$
说明:
^ # beginning of string
(?:\d,)? # non capture group, a digit and a comma, optional
\d{0,3} # 0 to 3 digits
(?: # non capture group
, # a comma
\d{1,3} # a to 3 digits
){0,2} # end group, may appear 0, 1 or 2 times
\. # a dot
\d{4} # 4 digits
$ # end of string