Привет, у меня есть список идентификаторов, разделенных запятыми, и мне нужно взять идентификаторы, которые делятся на 3.
Это невозможно сделать с помощью регулярных выражений любым полезным способом.
В зависимости от контекста вы можете использовать, например,
[i for i in my_ids.split(',') if int(i) % 3==0]
(при условии, что строка my_ids
содержит ваши идентификаторы)
Этот regexp будет соответствовать всем числам, делимым три:
^([0369]|[147][0369]*([147][0369]*[258][0369]*)*([147][0369]*[147]|[258])|[258][0369]*([258][0369]*[147][0369]*)*([258][0369]*[258]|[147]))+$
Вот является пример ipython сессией с помощью этой конструкции:
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']
Это может быть сделано, хотя – если Вы уверены, что Ваш вход только содержит разделенные от запятой целые числа (и не, скажем, слова) – ответ от Florian Diesch содержит более нормальный способ сделать это.
Различия: ответ Florian преобразует все, что разделяется запятыми в целые числа (может вызвать проблему, когда вход не правильно построен), разделите их и возвратите их как целое число, если они работают. regex версия просто просканирует вход для любых чисел, делимых три (которые имеют границы слова с обеих сторон), и возвратите их как строки.