有没有一种简单的方法可以在Python中为ISBN添加破折号?

时间:2019-12-17 13:20:01

标签: python isbn

我有一列13位数字的ISBN数字(例如1234567890123)另存为字符串。要在报告中显示它们,我需要添加连字符,例如(123-4-567-89012-3)。我使用一个函数在显示之前添加破折号,例如

def format_isbn(isbn):
    return isbn[0:3] + "-" + isbn[3] + "-" + isbn[4:7] + "-" + isbn[7:12] + "-" + isbn[12]

是否缺少一种更简单的方法,可能是使用字符串格式?

4 个答案:

答案 0 :(得分:4)

不是,除了可能使用"-".join()

return "-".join([isbn[0:3], isbn[3], isbn[4:7], isbn[7:12], isbn[12]])

答案 1 :(得分:2)

如果您要使用提到的字符串格式:

return f"{isbn[0:3]}-{isbn[3]}-{isbn[4:7]}-{isbn[7:12]}-isbn[12]}"

答案 2 :(得分:0)

您可以在此处使用re.sub作为正则表达式选项:

isbn = "1234567890123"
output = re.sub(r'(\d{3})(\d{1})(\d{3})(\d{5})(\d{1})', '\\1-\\2-\\3-\\4-\\5', isbn)
print(output)

此打印:

123-4-567-89012-3

答案 3 :(得分:0)

如果

struct.unpack不能强迫您使用bytes值,那就很好了。

import struct


def format_isbn(n: str):
    fmt = struct.Struct("3s s 3s 5s s")
    return b'-'.join(fmt.unpack(n.encode())).decode()