import re
lista = """2019.3.0 Primeira versão totamente integrada com gitlab-ci
2019.3.0-dev0 Aplicado correções sugeridas por py3kwarn
2019.3.0-dev1 refatorado o metodo test_merge_csv_files0 para operar gitlab-ci com validação de csv
2019.3.0-dev2 import faker corrigido
2019.3.0-dev3 FAIL: test_discover_url_0 (TestAtosWebSF) corrigida
2019.3.0-dev4 corrigido ERROR: Failure: Error (unsupported locale setting)
2019.3.0-dev5 corrigido AssertionError em test_discover_url_0
2019.3.1 2019.3.1-dev0 → 2019.3.1
2019.3.1-dev0 fatoração de metodo a ser implementado futuramente
2019.3.10 Correções em epigrafe com mesmo numero
2019.3.11 Correções em º/°
2019.3.12 Correções em 'Nº 1.420 A'
2019.3.13 Corrigido diversos erros de falso positivo na localização da epigrafe e no capabilities para windows
2019.3.14 ferramentas e relatórios para reconstrução do acervo
2019.3.2 Validação gitlab-ci completa"""
pegar_data_extra = re.compile("\ {2,}")
pegar_ano_mes_dia = re.compile("(\d{4})\.(\d{1,2})\.(\d{1,2}).*")
pegar_extra = re.compile("-dev([^ ]+)")
def formatar_para_sort( x ):
x = pegar_data_extra.split( x )[0]
tmp = pegar_ano_mes_dia.search( x )
extra= pegar_extra.search( x )
ano = tmp.group(1)
mes = tmp.group(2)
dia = tmp.group(3)
# pegar versão, se não tiver colocar uma alta 9999
extra = extra.group(1) if extra else "9999"
# corrigir mes/dia para 2 digitos
mes = "0"+mes if len(mes) < 2 else mes
dia = "0"+dia if len(dia) < 2 else dia
out = ano+mes+dia+"."+extra
#print(x, " => ", out)
return out
l = sorted(lista.split(sep='\n'), key=formatar_para_sort, reverse=True)
for i in l:
print( i )