如何在每三位数字后添加一个逗号?

How to add a comma after every three digits?

在字符串之间添加一个字符

如何在字符串中的每三个字符后添加一个逗号?例如,我有一个字符串number = "2000",程序应该在字符串的右起三位后添加一个逗号。如何才能做到这一点? 我已经试过了,但没有用。

integer = 2000
print(str(integer)[:3] + "," + str(integer)[3:])

当我运行这个时,它打印出200,0

给这只猫换皮的方法有很多种,但我第一个想到的是把字符串长度的mod和div取3,然后用mod(如果有的话)确定第一段的长度,然后将所有内容均匀切成三块:

>>> def three_commas(x):
...     b, a = divmod(len(x), 3)
...     return ",".join(([x[:a]] if a else []) + [x[a+3*i:a+3*i+3] for i in range(b)])
...
>>> three_commas("2000")
'2,000'
>>> three_commas("31415")
'31,415'
>>> three_commas("123456789")
'123,456,789'

这是一个有点容易理解的解决方案。

首先我们反转数字,然后每 3 个位置插入 ,,然后我们再次反转数字。

def formatNum(integer):
    temp = str(integer)[::-1]
    k=0
    str1=""
    for i in temp:
        if(k==3):
            str1 = str1+ ','+i
            k=0
        else:
            str1 = str1+i
        k=k+1
    return str1[::-1]

integer = 2000
print(formatNum(integer))

使用正则表达式,您可以匹配 3 个数字并在左侧断言一个数字,并检查右侧是否有 3 个数字的可选重复项。

然后替换为逗号和完整匹配 ,\g<0>

(?m)(?<=\d)\d{3}(?=(?:\d{3})*$)

模式匹配:

  • (?m) 启用多行
  • (?<=\d) 正后视,向左断言一个数字
  • \d{3} 匹配 3 个数字
  • (?= 正面前瞻
    • (?:\d{3})*$ 可选择匹配 3 位数字直到字符串结尾
  • ) 关闭 looakhead

例子

import re

pattern = r"(?m)(?<=\d)\d{3}(?=(?:\d{3})*$)"
s = "2000\n31415\n123456789"

print(re.sub(pattern, r",\g<0>", s))

输出

2,000
31,415
123,456,789