在10,4小数的整数部分中将逗号输入正则表达式

时间:2019-03-14 15:32:26

标签: regex

我正在寻找一个正则表达式,它将十进制数限制为10,4,但是在整数部分(10)中,我希望它用逗号分隔。

例如-1,123,123,123.1234

这使我接近需要的东西-\ d {0,10}。\ d {4} 但我想在示例中显示逗号。

但是我不确定如何调整它以实现我所需要的吗?

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})是三个子模式之间的替代:

  • 最多9个数字,用逗号\d{1,3}(?:,\d{3}){0,2}表示,这是由1到3位数字组成的前导数字组,后面是最多2个正好由3位数字组成的可选组,各组之间用逗号隔开。
  • 带逗号的10位数字\d(?:,\d{3}){3},其中前导数字组必须恰好包含一位数字,然后是三个三位数字组,各组之间用逗号分隔。
  • 您必须以无逗号开头的数字\d{1,10}

浮动部分是一个点,后跟至少一个数字,最多四个数字。

请注意,如果您绝对可以避免使用正则表达式,那么这种正则表达式会让维护人员哭泣...

答案 1 :(得分:0)

我不认为您可以使用单个正则表达式来做到这一点

我使用的算法是

  1. 取小数点前的数字部分
  2. 将其转换为字符串
  3. 反转字符串
  4. 将字符串拆分为3位数字,以使最后一组具有1位,2位或3位数字(这取决于您的编程语言)
  5. 将字符串连接在一起,在各组之间插入,
  6. 反转字符串。
  7. 如有必要,请连接小数点和小数位数。

您现在有了正确格式的字符串。

答案 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

Demo