Python: идентификаторы фильтра регулярных выражений, делящиеся на 3

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

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

15 ответов

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

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

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

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

2
ответ дан 25 July 2018 в 18:32

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

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

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

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

2
ответ дан 2 August 2018 в 00:43

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

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

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

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

2
ответ дан 4 August 2018 в 16:13

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

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

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

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

2
ответ дан 6 August 2018 в 00:52

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

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

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

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

2
ответ дан 7 August 2018 в 18:17

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

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

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

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

2
ответ дан 10 August 2018 в 07:01

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

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

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

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

2
ответ дан 15 August 2018 в 18:59

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

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

1
ответ дан 25 May 2018 в 10:18

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 25 July 2018 в 18:32

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 2 August 2018 в 00:43

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 4 August 2018 в 16:13

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 6 August 2018 в 00:52

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 7 August 2018 в 18:17

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 10 August 2018 в 07:01

Это регулярное выражение будет соответствовать всем числам, делящимся на три:

^([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 содержит более здравый способ сделать это.

Различия: ответ Флориана преобразует все, что разделяется запятыми, в целые числа (может вызвать проблему, когда вход не является корректным), делить их и возвращать их как целочисленные, если они работают. Версия регулярного выражения будет просто проверять ввод для любых чисел, делящихся на три (которые имеют границы слов с обеих сторон) и возвращать их как строки.

1
ответ дан 15 August 2018 в 18:59

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

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