Sucesso ao ler documentos
Isso usa apenas a função de substituição de expressão regular e a função zfill
string para preencher uma função de retorno de chamada.
import re
a = """Hello 1 of 60
Hello.22.of.60.
Hello 33of60
Hello.44of60.
Hello 1 of 6
Hello.2.of.6.
Hello 3of6
Hello.04of6.""".splitlines()
def F(m):return r' S01E%s'%m.group(1).zfill(2)
print '\n'.join([re.sub(r'\D(\d+).*', F, x, 1)for x in a])
Saída:
Hello S01E01
Hello S01E22
Hello S01E33
Hello S01E44
Hello S01E01
Hello S01E02
Hello S01E03
Hello S01E04
Ou se você quiser manter o segundo número, uma pequena diferença:
print '\n'.join([re.sub(r'\D(\d+).*?(\d+).*', lambda m:r' S01E%s of %s'%(m.group(1).zfill(2),m.group(2).zfill(2)), x)for x in a])
Saída:
Hello S01E01 of 60
Hello S01E22 of 60
Hello S01E33 of 60
Hello S01E44 of 60
Hello S01E01 of 06
Hello S01E02 of 06
Hello S01E03 of 06
Hello S01E04 of 06