Python: идентификаторы фильтра Regex делятся на 3

Привет, у меня есть список идентификаторов, разделенных запятыми, и мне нужно взять идентификаторы, которые делятся на 3.

0
задан 12 June 2012 в 10:56

2 ответа

Это невозможно сделать с помощью регулярных выражений любым полезным способом.

В зависимости от контекста вы можете использовать, например,

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

(при условии, что строка my_ids содержит ваши идентификаторы)

0
ответ дан 12 June 2012 в 10:56

Этот 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 версия просто просканирует вход для любых чисел, делимых три (которые имеют границы слова с обеих сторон), и возвратите их как строки.

1
ответ дан 12 June 2012 в 10:56

Другие вопросы по тегам:

Похожие вопросы: