"Упорядоченное" сканирование с помощью регулярного выражения - PullRequest
0 голосов
/ 26 января 2012

У меня есть строка my_string:

[...]
THE_PREFIX value1 THE_SUFFIX
THE_PREFIX value2 THE_SUFFIX
[...]

И я хочу получить каждое значение (значение1, значение2, ...). Я пытался

my_string.scan(/THE_PREFIX (.*) THE_SUFFIX/m)

но возвращает только одну строку:

value1 THE_SUFFIX THE_PREFIX value2

Как я мог это сделать?

EDIT

Каждое значение содержит множество специальных символов. Я не хочу делать регулярные выражения, соответствующие этому

Ответы [ 2 ]

1 голос
/ 26 января 2012

Использовать квантификатор с регулярным выражением:

irb(main):001:0> a = "THE_PREFIX value1 THE_SUFFIX
irb(main):002:0" THE_PREFIX value2 THE_SUFFIX"
=> "THE_PREFIX value1 THE_SUFFIX\nTHE_PREFIX value2 THE_SUFFIX"
irb(main):003:0> a.scan(/THE_PREFIX (.*) THE_SUFFIX/m)
=> [["value1 THE_SUFFIX\nTHE_PREFIX value2"]]
irb(main):004:0> a.scan(/THE_PREFIX (.*?) THE_SUFFIX/m)
=> [["value1"], ["value2"]]
1 голос
/ 26 января 2012

Ваш шаблон слишком свободный:

my_string.scan(/THE_PREFIX (\w+) THE_SUFFIX/m)

Возвращает:

my_string.scan(/THE_PREFIX (\w+) THE_SUFFIX/m)
=> [["value1"], ["value2"]]

Сведите его, если вы хотите один массив:

my_string.scan(/THE_PREFIX (\w+) THE_SUFFIX/m).flatten
=> ["value1", "value2"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...