Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

Вывести сообщение, что каждый элемент списка содержит вхождение регулярного выражения

1. Кратко
См. заголовок.

2. Минимальный пример
Имеется список.
sashalist = ['Sasha1', 'Sasha14', 'Sasha4147']
Необходимо проверить, что каждый элемент списка содержит $вхождение, и если действительно содержит, вывести сообщение.
Положим, $вхождение — цифра 1. Работающий пример:
Демо на Ideone
sashalist = ['Sasha1', 'Sasha14', 'Sasha4147']
if all('1' in item for item in sashalist): print('Все элементы списка содержат «1»!')
Вывод:
Все элементы списка содержат «1»!
Если же $вхождение — это регулярное выражение, (например, \d), то не найду, что я должен сделать.

3. Попытки справиться с проблемой самостоятельно
3.1. Аналогия
Демо на Ideone
import re
sashalist = ['Sasha1', 'Sasha14', 'Sasha4147'] sasharegex = r'\d'
if all(re.search(sasharegex, sashalist) in item for item in sashalist): print('Все элементы списка содержат цифру!')
Получаю traceback:
Traceback (most recent call last): File "./prog.py", line 7, in File "./prog.py", line 7, in File "/usr/lib/python3.5/re.py", line 173, in search return _compile(pattern, flags).search(string) TypeError: expected string or bytes-like object
3.2. Цикл
Демо на Ideone
import re
sashalist = ['Sasha1', 'Sasha14', 'Sasha4147'] sasharegex = r'\d'
for item in sashalist: sasharegexsearch = re.search(sasharegex, item) if sasharegexsearch: print("Все пункты списка содержат цифру!")
Сообщение выводится после проверки каждого элемента:
Все пункты списка содержат цифру! Все пункты списка содержат цифру! Все пункты списка содержат цифру!
А нужно, чтобы вывелось одно сообщение после успешной проверки всего списка.


Ответ

https://ideone.com/msQnop
import re
sashalist = ['Sasha1', 'Sasha14', 'Sasha4147'] sasharegex = r'Sas'
if all(re.search(sasharegex, item) for item in sashalist): print('All elements have sasharegex !')

Комментариев нет:

Отправить комментарий