Python: IDs de filtro Regex divisíveis por 3

0

Oi eu tenho uma lista de ids separados por vírgulas e eu preciso levar os ids que são divisíveis para 3.

    
por Martin 12.06.2012 / 08:56

2 respostas

2

Isso não pode ser feito com um regex de maneira útil.

Dependendo do seu contexto, você pode usar, por exemplo

[i for i in my_ids.split(',') if int(i) % 3==0]

(assumindo que a string my_ids contenha seus ids)

    
por Florian Diesch 12.06.2012 / 13:33
1

Este regexp corresponderá a todos os números divisíveis por três:

^([0369]|[147][0369]*([147][0369]*[258][0369]*)*([147][0369]*[147]|[258])|[258][0369]*([258][0369]*[147][0369]*)*([258][0369]*[258]|[147]))+$

Aqui está uma sessão de ipython usando esta construção:

In [1]: import re

In [2]: my_ids = '1, 2, 3, 4, 5, 6, 7'

In [3]: idres = [x[0] for x in re.findall(r'\b([0369]|[147][0369]*([147][0369]*[258][0369]*)*([147][0369]*[147]|[258])|[258][0369]*([258][0369]*[147][0369]*)*([258][0369]*[258]|[147]))+\b', my_ids)]

In [4]: idres
Out[4]: ['3', '6']

Isso pode ser feito, embora - se você tiver certeza de que sua entrada contém apenas números inteiros separados por vírgulas (e não, digamos, palavras) - a resposta de Florian Diesch contém uma maneira mais segura de faça isso.

Diferenças: A resposta de Florian irá converter tudo o que é separado por vírgulas em números inteiros (pode causar problemas quando a entrada não é bem formada), dividi-los e retorná-los como números inteiros, se eles funcionarem. A versão regex irá apenas varrer a entrada para quaisquer números divisíveis por três (que possuem limites de palavras em ambos os lados) e retorná-los como strings.

    
por mirabilos 22.12.2013 / 19:14