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

在 string 之间添加一个字符

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

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

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

回答1

给这只猫剥皮有不同的方法,但第一个建议是把 string 长度的 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'

回答2

这是一个易于理解的解决方案。

首先我们反转数字然后每 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 位数字并在左侧断言一个数字,并检查右侧是否有 3 位数字的可选重复。

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

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

模式匹配:

  • (?m) 启用多行
  • (?<=\d) 正向向后看,向左断言一个数字
  • \d{3} 匹配 3 位数字
  • (?= 正向前瞻
    • (?:\d{3})*$ 可选匹配 3 位数直到 string
  • ) 关闭lookhead

例子

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

相似文章

随机推荐

最新文章