У меня есть строка в Rails, например. «Это сообщение в Твиттере. #книги «Война и мир» Льва Толстого. Я люблю эту книгу!», и я хочу разобрать текст и извлечь только определенные фразы, например «Война и мир Льва Толстого».
Это вопрос использования Regex и переноса текста между «#books» на «.»?
Что, если в сообщении нет структуры, например: «Это сообщение в Твиттере #книги «Война и мир» Льва Толстого, я люблю эту книгу!» или "Это твиттер-сообщение. Я люблю книгу Льва Толстого "Война и мир" #книги" Как я могу надежно вытянуть фразу "Война и мир Льва Толстого", не зная фразы ex ante.
Существуют ли какие-либо драгоценные камни, методы и т. д., которые могут помочь мне в этом?
По крайней мере, как бы вы назвали то, что я пытаюсь сделать? Это поможет мне найти решение в Google. Я пробовал несколько поисков по "разбору" без везения.
--- отредактировать --- на основе предложения @rogeliog я добавлю следующее:
Я могу жить с мусорным текстом, который идет после #books, но не перед ним. Я попробовал "match.(/#books.*/)" -- результаты здесь: www.rubular.com/ r/gM7oSZxF5M.
Но как я могу получить результат № 6? (например, когда кто-то ставит #books в конце предложения)?
Есть ли способ сделать if-then с регулярным выражением? Что-то типа:
если [#books находится в конце сообщения],
затем [возьмите последние 10 слов перед #books],
иначе [соответствие.(/#books.*/)]
Если вы предлагаете регулярное выражение, опубликуйте свое решение по постоянной ссылке на rubular.com.