Я пытаюсь извлечь из длинного текста последовательность из нескольких слов, написанную заглавными буквами.Итак, в примере:
Вот пара слов текста.Если вам нужна дополнительная информация, пожалуйста, обратитесь к журналу ЗАПИСИ ДОКУМЕНТА.Он объясняет книгу «Путь к просветлению», которая решит все проблемы.Кроме того, не забывайте РУКОВОДСТВО ПО НАСТРОЙКЕ АВТОМОБИЛЯ.
Я хочу захватить DOCUMENT RECORDS
, PATH TO ENLIGHTENMENT
и CAR TUNE-UP GUIDELINES
.
Следующие регулярные выражения работаютв Rubular (за исключением того, что они не совпадают с падежами, включая дефисы).
(\b([A-Z]|-|\s){3,}\b)
(\b[A-Z- ]{3,}\b)
(\b[A-Z-\s]{3,}\b)
Однако я не могу заставить их работать в моей программе.Когда я запускаю следующий код в моей программе (это задача rake),
if content.to_s.scan(/\b[A-Z-\s]{3,}\b/)
item_title = content.to_s.scan(/\b[A-Z-\s]{3,}\b/)
я получаю следующую ошибку:
... Long stack trace followed by:
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
Если я заменю \s
простопробел, я не получаю сообщение об ошибке, но оно больше не соответствует чему-либо.Я использую Ruby 1.9.3.Почему это работает на сайте rubular.com, а не в моей программе?Я понимаю, что мое регулярное выражение небрежно.Как я могу улучшить это, чтобы быть более точным?