Регулярное выражение для объектов запроса

#python #regex

#python #регулярное выражение

Вопрос:

Я ищу регулярное выражение, способное различать подстроки в запросе. Практическим примером может быть запрос к базе данных фильмов, целью которого является возврат результатов:

 # query 1
title:movie one year:2018 rating:10 
# query 2
year:2019 rating:20
  

Для первого примера я хочу, чтобы регулярное выражение могло идентифицировать название, год и рейтинг, который является фильмом номер один, 2018 и 10 соответственно.

Я достиг решения, которое близко, но не полностью удовлетворяет требованиям:

 title:w 
year:w 
rating:w 
  

Это работает для запросов, состоящих из отдельных слов (например, title: movie), но не работает для запросов с несколькими объектами (например, title: movie one). Есть ли способ, которым я могу это выполнить?

Ответ №1:

Вы могли бы использовать группы без захвата для сопоставления «меток», а затем использовать группы захвата для сопоставления всех символов между метками (вместо просто символов word, чтобы вы захватывали пробелы и т.д.). Например:

 import re

s = 'title:movie one year:2018 rating:10'

matches = re.match(r'(?:title:)(.*)?(?:year:)(.*)?(?:rating:)(.*)?', s).groups()
print(matches)
# ('movie one ', '2018 ', '10')
  

Ответ №2:

Что-то вроде этого?

 import re
string='Movie One'
pattern='[ws]*'
result=re.match(pattern,string)
print(result)
  

Результат:

 <_sre.SRE_Match object; span=(0, 9), match='Movie One'>
  

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

1. Я не думаю, что вы поняли задачу

2. Я отвечал на эту строку: «Это работает для запросов, состоящих из отдельных слов (например, название: фильм), но не работает для запросов с несколькими объектами (например, название: фильм первый). Есть ли способ, которым я могу это выполнить?»