Хотя в вопросе отсутствуют ваши попытки (фрагменты кода), я все равно опубликую ответ.
Он основан на том факте, что вся закодированная строка доступна сразу.
code.py :
#!/usr/bin/env python3
import sys
import re
pat = re.compile("(\d{2}.)*?")
def decode(s):
groups = (item for item in pat.findall(s) if item)
#print(list(groups)) # @TODO - cfati: !!! Decommenting this, will result in empty string being returned !!!
return "".join((group[-1] * int(group[:-1]) for group in groups))
def main():
encoded_strings = [
"03a10b05@",
"03a12b"
]
for encoded in encoded_strings:
print("{:s}: {:s}".format(encoded, decode(encoded)))
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
print("Done.")
Примечания :
- Использование [Python3.Docs]: re - Регулярное выражениеоперации разбивает строку на ( цифра символ - например, " 10b ") строковые группы
- Затем для каждой группы строкон вычисляет свою декодированную строку путем умножения (последнего) символа на число, состоящее из 2 (предыдущих) цифр, и в конечном итоге объединяет все строки
- Внимание : он опирается на входную строкубудучи правильно сформированным, это означает, что он будет игнорировать все свои части, которые не соответствуют (указанному выше) синтаксису группы
Вывод :
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056031014]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
03a10b05@: aaabbbbbbbbbb@@@@@
03a12b: aaabbbbbbbbbbbb
Done.