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