ruby regex извлечь слово между одинарными кавычками

ruby regex

846 просмотра

2 ответа

Я ищу регулярное выражение для соответствия:

ciao: c'iao 'ciao'

с участием:

ciao #every word excluding non-word character
c'iao #including apostrophes
ciao #excluding the quotes ''

До сих пор я смог соответствовать первым двум требованиям:

/[\w']+/

но я борюсь с извлечением слова между одинарными кавычками (без кавычек). Обратите внимание, что у меня не будет случая, когда слово с апострофом будет заключено в кавычки (например, 'c'iao')

Я видел много похожих вопросов и ответов, но не смог найти подходящих для моих нужд; Дополнительные баллы за ответ, который включает краткое объяснение :)

Автор: davideghz Источник Размещён: 08.11.2019 11:29

Ответы (2)


4 плюса

Решение

Вы можете использовать следующее выражение:

/\w+(?:'\w+)*/

Посмотреть демонстрацию Rubular

Выражение соответствует:

  • \w+ - 1 или более слов
  • (?:'\w+)*- ноль или более последовательностей (так как (?:...)*это группа без захвата, которая группирует последовательность подшаблонов, количественно определенных с *квантификатором, совпадающим с 0 или более экземплярами):
    • ' - апостроф
    • \w+ - 1 или более слов.

Смотрите короткую демонстрацию Ruby здесь :

"ciao: c'iao 'ciao'".scan(/\w+(?:'\w+)*/)
# => [ciao, c'iao, ciao]
Автор: Wiktor Stribiżew Размещён: 20.08.2016 03:20

0 плюса

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

str = "'Twas because Bo didn't like Bess' or y'all's 'attitude'"

str.split.map { |s| s =~ /\A'.+'\z/ ? s[1..-2] : s }
  #=> ["'Twas", "because", "Bo", "didn't", "like", "Bess'", "or", "y'all's", "attitude"]

Первый шаг производит

arr = str.split
  #=> ["'Twas", "because", "Bo", "didn't", "like", "Bess'", "or", "y'all's", "'attitude'"]

Регулярное выражение сопоставляет элементы arrэтого начала и конца одинарной кавычкой.

Автор: Cary Swoveland Размещён: 20.08.2016 06:53
Вопросы из категории :
32x32