我有一个固定长度的字符串。
>>> s = "000000000001048700000010768"
我需要将此字符串拆分为相反顺序的5个字符的部分(从最后一个字符开始)。 输出应为:
<00> 00 00000 00001 04870 00000 10768
我找到了textwrap
模块,它执行拆分,但输出略有不同。
>>> import textwrap
>>> print ' '.join(textwrap.wrap(s, 5))
00000 00000 01048 70000 00107 68
是否有一个简单的解决方案可以解决这个问题?也许使用s.format()
答案 0 :(得分:2)
在拆分之前反转字符串。
parts = textwrap.wrap(s[::-1], 5)
然后您可以撤消列表,返回原始订单。
print " ".join(parts[::-1])
或简而言之:
print " ".join(textwrap.wrap(s[::-1], 5)[::-1])
答案 1 :(得分:0)
没有textwrap的解决方案并将字符串反转两次:
print ' '.join(s[max(i-5, 0):i] for i in reversed(range(len(s), 0, -5)))
答案 2 :(得分:0)
一种正则表达式方式,既然您确认自己并不想分割,只需添加空格。
>>> import re
>>> re.sub('(.{5})(?=.)', r'\1 ', s[::-1])[::-1]
'00 00000 00001 04870 00000 10768'
这抓住了五个字符后跟一些东西(我希望\z
可以工作)并用自己和空格替换它们。事先反转输入字符串,然后反转输出字符串,以便进行从右到左的分组。