可以這樣做在Python的方式:
>>> a="A1f4h3L2"
>>> "".join(map(lambda x,y:x*int(y),a[::2],a[1::2]))
'AffffhhhLL'
它是如何工作的:
>>> a[::2] # give me all alpahbhet
'AfhL'
>>> a[1::2] # gives me all integer
'1432'
您可以使用壓縮也:以上
>>> "".join(x*int(y) for x,y in zip(a[::2],a[1::2]))
'AffffhhhLL'
適用於數字不到10
如果數字大於10:
:使用Lambda和地圖
>>> import re
>>> s1 = 'S15Y16r13g11b8X8J15Q9V2i18p5e10'
>>> "".join(x*int(y) for x,y in zip(re.findall('[a-zA-Z]',s1),re.findall('\d+',s1)))
'SSSSSSSSSSSSSSSYYYYYYYYYYYYYYYYrrrrrrrrrrrrrgggggggggggbbbbbbbbXXXXXXXXJJJJJJJJJJJJJJJQQQQQQQQQVViiiiiiiiiiiiiiiiiipppppeeeeeeeeee'
>>> "".join(map(lambda x,y:x*int(y),re.findall('[a-zA-Z]',s1),re.findall('\d+',s1)))
'SSSSSSSSSSSSSSSYYYYYYYYYYYYYYYYrrrrrrrrrrrrrgggggggggggbbbbbbbbXXXXXXXXJJJJJJJJJJJJJJJQQQQQQQQQVViiiiiiiiiiiiiiiiiipppppeeeeeeeeee'
檢查這個,如果你不想使用重:
>>> s1 = 'S15Y16r13g11b8X8J15Q9V2i18p5e10'
>>> my_list =[]
>>> my_digit =''
>>> for x in s1:
... if x.isalpha():
... if my_digit != '':
... my_list.append(my_digit)
... my_digit=''
... my_list.append(x)
... else:
... my_digit += x
...
>>> my_list
['S', '15', 'Y', '16', 'r', '13', 'g', '11', 'b', '8', 'X', '8', 'J', '15', 'Q', '9', 'V', '2', 'i', '18', 'p', '5', 'e']
現在你可以從上面施加任何方法是這樣的:
>>> "".join(x*int(y) for x,y in zip(my_list[::2],my_list[1::2]))
你是不是調用str.is *方法;添加括號。另外,你假設最後一個字母后面跟着兩位數字。 – 2014-12-04 12:31:08