0
0 комментариев

Есть список, в котором есть «дубликаты». Мне нужно из него выбрать по одному элементу, т.е мне не нужны дубликаты в виде «2 третьих трейлера, 3 вторых, 5 «нулевых» и тд» с проверкой одновременного наличия в каждом из названий следующих слов:

moive = 'Стив Джобс'
year='2015'
lang = 'русский'
format = 'трейлер'

Строки могут иметь самый разный вид, к примеру:

Стив Джобс 2015 русский трейлер 3
Стив Джобс 2015 русский трейлер №3
Стив Джобс\Steve Jobs 2015 русский трейлер #2
Стив Джобс - Русский Трейлер 2 (2015)
Стив Джобс 2015 русский Трейлер
СТИВ ДЖОБС (STEVE JOBS) 2015 Трейлер №4 (Русский язык)
Стив Джобс Трейлер
Стив Джобс 2015
и тд.

В примерах выше есть:

  • 1 вариант 4го ролика,
  • 2 варианта 3го ролика,
  • 2 варианта 2го,
  • 1 вариант «нулевого»,
  • 2 варианта, которые не имеют всех необходимых слов.

Мне нужно добавить в новый список: 4ый трейлер, по одному варианту из 3го и 2го, и «нулевой» трейлер.

Я себе это вижу так: прогнать через цикл от 1 до 4 каждый элемент списка, подставляя в регулярное выражение наличие слов и значение для версии трейлера (1-4). Цикл написать не проблема, проблема именно в регулярном выражении.

Как регулярным выражением решить данную задачу?

Добавлено:
На данном примере:

Стів Джобс. Офіційний український трейлер (2015) HD (ghKKd_gwhU4)
СТІВ ДЖОБС / СТИВ ДЖОБС. Трейлер 3 (український) (LSeGuxtk6V4)
Стів Джобс - український трейлер №2 (PRXbPo91d5Q)
СТІВ ДЖОБС / СТИВ ДЖОБС. Трейлер 2 (український) (xIVnRf5cSpQ)
Стів Джобс / Steve Jobs (2015) (український трейлер №3) (7hqcZzawubo)

при использовании:

movie = r'(?P<movie>стив\s+джобс)'
year = '(?P<year>2015)'
lang = '(?P<lang>український)' # сменил язык
trailer = r'(?P<trailer>трейлер(?:\s+(?:№|#)?(\d))?)(?i)

выдало:

[(Title(movie=None, year=2015, lang='український', trailer=None),
  'Стів Джобс. Офіційний український трейлер (2015) HD (ghKKd_gwhU4)'),
 (Title(movie=None, year=2015, lang='український', trailer=2),
  'Стів Джобс - український трейлер №2 (PRXbPo91d5Q)'),
 (Title(movie=None, year=2015, lang='український', trailer=3),
  'Стів Джобс / Steve Jobs (2015) (український трейлер №3) (7hqcZzawubo)'),
 (Title(movie='Стив Джобс', year=2015, lang='український', trailer=3),
  'СТІВ ДЖОБС / СТИВ ДЖОБС. Трейлер 3 (український) (LSeGuxtk6V4)'),
 (Title(movie='Стив Джобс', year=2015, lang='український', trailer=2),
  'СТІВ ДЖОБС / СТИВ ДЖОБС. Трейлер 2 (український) (xIVnRf5cSpQ)')]

Ожидаемый ответ должен был быть без:

  1. Стів Джобс. Офіційний український трейлер (2015) HD (ghKKd_gwhU4)

  2. Стів Джобс — український трейлер №2 (PRXbPo91d5Q) Стів Джобс / Steve

  3. Jobs (2015) (український трейлер №3) (7hqcZzawubo)

так как «СтИв Джобс» и «СтІв Джобс» разные вещи. Ну и еще код пропустил дубли трейлеров №2 и №3.


Добавить комментарий