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)
Oi eu tenho uma lista de ids separados por vírgulas e eu preciso levar os ids que são divisíveis para 3.
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)
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.