Выбор из списка значений по регулярному выражению

Есть список в Python a = ['data1', 'asdf', 'data2', 'fghh', 'jhgf', 'data3']как одним выражением получить из него другой список, который будет содержать всё элементы первого, начинающиеся с 'data'? Как получить список всех элементов списка а, содержащих в названии числа?


Ответы (1 шт):

Автор решения: Павел

Через регулярные выражения можно реализовать следующим образом:

Как одним выражением получить из него другой список, который будет содержать всё элементы первого, начинающиеся с 'data'

import re

a = ['data1', 'asdf', 'data2', 'fghh', 'jhgf', 'data3']

b = [x for x in a if re.match(r'data.*', x)]

print(b) # ['data1', 'data2', 'data3']

Как получить список всех элементов списка а, содержащих в названии числа?

a = ['data1', 'asdf', 'data2', 'fghh', 'jhgf', 'data3', 'some1']

b = [x for x in a if re.match(r'.*\d.*', x)]

print(b) # ['data1', 'data2', 'data3', 'some1']

Дополнительно

Я считаю, что более удобно реализовать эту фильтрацию будет через list comprehenshion, для данных задач он чуть более удобно применяется за счет встроенных в Python функций startswith() и isdigit(). Вот как можно реализовать тот же самый функционал:

Поиск элементов, начинающихся с data:

b = [x for x in a if x.startswith('data')]

Поиск элементов, содержащих цифры:

b = [x for x in a if any(map(str.isdigit, x))]
→ Ссылка