如何在 Python 中格式化九位数字的字符串?

How to format a string of nine digits in Python?

我有一个字符串范围,例如:"024764108""002231531""005231329",它们恰好有 9 个数字。我想将 - 添加到每组 3 位数字。我想要的结果如下: "024-764-108""002-231-531""005-231-329"。 我该如何向 python 解释我的想法?

可能有更好的方法来执行此操作,但您可以使用 [] 将字符串分成 3 个部分。

old_str = "024764108"
new_str = old_str[:3] + '-' +  old_str[3:6] + '-' + old_str[6:]

考虑这段代码,使用字符串切片:将此 str 转换为您的格式的代码段是 string[0:3] + "-" + string[3:6] + "-" + string[6:9]

这是您更新后的方法和一些测试用例。此外,它只接受恰好包含 9 位数字的输出。

def format_digitstring(string:str):
    if len(string) != 9:
        return None
    return string[0:3] + "-" + string[3:6] + "-" + string[6:9]

s1 = "024764108"
s2 = "002231531"
s3 = "005231329"
s4 = "00112341"

print(format_digitstring(s1))
print(format_digitstring(s2))
print(format_digitstring(s3))
print(format_digitstring(s4))

输出:

024-764-108
002-231-531
005-231-329
None

这是一个动态的解决方案:

In [41]: df
Out[41]:
               num
0        024764108
1        002231531
2        005231329
3  012345678901234

In [42]: df.num.str.extractall(r'(\d{3})').groupby(level=0)[0].apply('-'.join)
Out[42]:
0            024-764-108
1            002-231-531
2            005-231-329
3    012-345-678-901-234
Name: 0, dtype: object

简单的解决方案:

number = "024764108"
new_number = number[:3] + '-' + number[3:6]+ '-' + number[6:]

如果使用 python 3.6,您可以考虑 'f strings',f 字符串允许您在字符串中进行一些处理。

f'{string[:3]}-{string[3:6]}-{string[6:]}'

另一种选择是将您的字符串分成三部分,然后对数组进行连接。

split_string = [string[i: i + 3] for i in range(0, len(string), 3)]
formated_number = '-'.join(split_string)

这行代码的第一行创建了一个包含长度为 3 的子字符串的数组,然后它用一个“-”字符连接该数组的元素。

这也行:

import re
s='024764108'
print(('{}-'*2+'{}').format(*re.findall('(...)',s)))

或者如果你想在所有行上都这样做,你可以使用熊猫的应用功能。

向前看正,\d{3}表示三位数字后面跟着数字(?=\d),三位数字后加'-'('\1-')。

import re
number="024764108"
re.sub(r'(\d{3})(?=\d)',r'-',number)