2013-12-24 1 views
0

Я пытаюсь извлечь несколько подстрок из строки в Ruby, используя регулярное выражение.Ruby regexp необязательные повторяющиеся группы?

Это моя строка: text.1.2.3.4.5.

То, что я хотел бы, чтобы иметь матч с несколькими группами, как следующее:

text 
.1 
.2 
.3 
.4 
.5 

text может быть любым символом слова. Остальные должны быть группами \.\d*, но их не может быть. Итак, строка вроде этого: text должна совпадать только с одним полученным результатом, который равен text.

Это то, что я пробовал, но он не работает должным образом. Я только получаю text и последнюю группу .5:

^(\w*)(?:(\.\d+)|$)* 

ответ

3
"text.1.2.3.4.5".scan(/\A\w+|\.\d*/) 
# => ["text", ".1", ".2", ".3", ".4", ".5"] 
+1

Nice! «Сканирование» - это то, о чем я не знал. Благодаря! – Oktav

0

Я не регулярное выражение героя, но вот мой выстрел:

(\w*)(\.\d+)? 

Это кажется довольно простой, но и, кажется, сделать трюк (за исключением дополнительного пустого матча в конце) Отъезд http://rubular.com/r/xAqgUqERa7 играть с ним

0

Вы имели в виду это?

> "text.1.2.3.4.5".scan(/([a-zA-Z]+|\.\d+)/) 
=> [["text"], [".1"], [".2"], [".3"], [".4"], [".5"]] 
0

Это похоже на работу (\w*)(\.\d+)

+0

это соответствует только '1: "Текст" 2:». 1" ' – Oktav