我有一列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]
是否缺少一种更简单的方法,可能是使用字符串格式?
答案 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()