我正在尝试创建一个将采用“压缩”字符串的函数,例如
'a12b3c'
并返回其“展开”形式,对于此示例将为
'aaaaaaaaaaaabbbc'
如果角色后面没有数字,则每个角色应重复多次,如果跟随角色,则重复一次。
如果“压缩”字符串中的数字值只是一位数字,我能够创建一个能够执行此操作的函数,因此我的尝试适用于像
这样的字符串'a3b2c6'
但我似乎无法找到一种方法来考虑数值超过一位数的情况。
答案 0 :(得分:7)
使用正则表达式:
>>> import re
>>> compressed = "a12b3c"
>>> expanded = ""
>>> for char, count in re.findall(r'(\w)(\d+)?', compressed):
... count = int(count or 1)
... expanded += char*count
...
>>> expanded
'aaaaaaaaaaaabbbc'
答案 1 :(得分:2)
这是一个带有生成器表达式的oneliner:
>>> import re
>>> s = 'a12b3c'
>>> ''.join(x*int(y or 1) for x,y in re.findall('(\w)(\d*)', s))
'aaaaaaaaaaaabbbc'