Регулярное выражение для формирования шаблона, содержащего группу слов - PullRequest
1 голос
/ 13 февраля 2011

Я хочу сделать что-то подобное в Ruby

У меня есть такой текст

    some_random_text unit 1 some_random_text chap 3 some_random_text

Теперь я хочу извлечь

    some_random_text, 'unit 1', some_random_text, 'chap 3' 

Для этого я использую выражение, подобное этому

    my_string.split(/(unit[1-9 ]+|chap[1-9 ]+)/)

Я повторяю шаблон [1-9] + как для «юнитов», так и для «парней», потому что если я группирую как

   /((unit|chap)[1-9 ]+)/

Возвращает

    some_random_text, 'unit', 'unit 1', some_random_text, 'chap', 'chap 3' 

в котором есть дополнительные элементы, которые мне не нужны.

Как мне сделать группировку, которая мне нужна?

1 Ответ

1 голос
/ 13 февраля 2011

Попробуйте это:

my_string.split(/((?:unit|chap)[1-9 ]+)/)

Ваше регулярное выражение split содержит две группы захвата (...), которые включены в результат. Использование (?:...) не будет захватывать меньшую группу и, соответственно, будет называться группа без захвата .

Кроме того, обратите внимание, что [1-9 ]+ может содержать несколько пробелов и чисел, но не может содержать нули, например unit 1 2 4. Вы можете захотеть /((?:unit|chap) +[1-9])/ или /((?:unit|chap) +[1-9][0-9]*)/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...