如何在 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)
我有一个字符串范围,例如:"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)