Я ищу регулярное выражение (Python), которое соответствует подстроке конкретного запроса, пока не произойдет другая подстрока, если это произойдет. Для лучшего понимания приведу несколько примеров:
# Query 1
title:chicago bullie
В каждом запросе моя цель - захватить title
и строку (и), которые следуют за ним. Я начал с регулярного выражения title:.*
, которое захватывает весь запрос title:chicago bullie
. Запросы становятся более сложными, включая другие элементы:
# Query 2
title:chicago bullie author:adam
В этом случае запрос title:.*
больше не работает, потому что моя цель - захватить только title:chicago bullie
и исключить другой элемент author:adam
. Другими словами, я хочу захватить ключевое слово title
, за которым следует строка или несколько строк до тех пор, пока запрос не закончится или не появится другое ключевое слово (например, автор, год и т. Д.). Обратите внимание, что за ключевыми словами всегда следует :
и строка или несколько строк. Запросы могут также включать ключевое слово AND
для обозначения последнего ключевого слова:
# Query 3
title:chicago bullie AND author:adam
Я думал о том, чтобы использовать отрицательный взгляд для захвата подстроки title:<string(s)>
до тех пор, пока строка не закончится или не появится другое ключевое слово (за которым следует :
и другие строки). Я придумал регулярное выражение title:.* (?!:)
, но я не уверен, что это лучший способ сделать это. Он работает для всех примеров, кроме тех, которые имеют ключевое слово AND
.
# Query 3
type:action title:chicago bullie one author:adam
Captured group: title:chicago bullie
# Query 4
type:action title:chicago bullie one AND author:adam
Captured group: title:chicago bullie AND
Хотя регулярное выражение работает для запросов без ключевых слов AND
, я все же думаю, что решение не идеально для этих случаев. Обратите внимание, что есть пробельный символ, разделяющий title:.*
и отрицательный символ (?!:)
.
Есть ли чистый (er) способ охватить все перечисленные требования?