如何格式化字符串?

时间:2018-05-10 22:45:45

标签: python pandas

我有一系列字符串,例如:(?<! # negative lookbehind , # comma ) , (?= # positive lookahead \s # whitespace ) "024764108""002231531",它们恰好有9位数字。我想将"005231329"添加到每组3位数。我想要的结果如下: -"024-764-108""002-231-531"。 我如何向python解释我的想法?

6 个答案:

答案 0 :(得分:3)

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

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的子字符串的数组,然后它连接该数组的元素,中间带有“ - ”字符。

答案 1 :(得分:2)

可能有更好的方法,但您可以使用[]将字符串拆分为3个部分。

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

答案 2 :(得分:2)

简易解决方案:

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

答案 3 :(得分:1)

使用字符串切片考虑此代码:将此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

答案 4 :(得分:0)

这也是:

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

或者如果你想在所有行上进行,你可以使用panda的应用功能。

答案 5 :(得分:0)

向前看是积极的,\ d {3}表示三位数后跟数字(?= \ d),&#39; - &#39;在三位数后添加(&#39; \ 1 - &#39;)。

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