在 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