2015-08-04 2 views
3

Я хочу, чтобы соответствовать строкеRegex чтобы соответствовать повторяющиеся группы только захватить одну группу

6 cakes 5 donuts 12 muffins 

на три группы именно. 6 cakes, 5 donuts, 12 muffins. Для достижения этой цели я использовал регулярное выражение

([\d]{1}[\s]{1}[\w]*) 

Но проблема его только соответствие с первой группой 6 cakes и игнорируя остальные. Как я могу изменить его, чтобы повторить группу.

+0

Почему Regex для этого? – Shar1er80

ответ

2

Вам нужно только получить MatchCollection с Regex.Matches и получить спички. Регулярное выражение может быть

\d+\s+\w+ 

См regex demo

В C#,

var str = "6 cakes 5 donuts 12 muffins"; 
var rx = new Regex(@"\d+\s+\w+"); 
var coll = rx.Matches(str); 
foreach (Match m in coll) 
    Console.WriteLine(m.Value); 

См IDEONE demo

Вы также можете использовать LINQ:

var str = "6 cakes 5 donuts 12 muffins"; 
var rx = new Regex(@"\d+\s+\w+"); 
var coll = rx.Matches(str).Cast<Match>().Select(p => p.Value).ToList(); 

enter image description here

+0

Работает идеально. Только поймать - если имя самой пищи содержит некоторое количество, тогда шаблоны ломаются. Напр. '3 пива 5 куриных 65 9 тортов. –

+0

Вы можете использовать ['\ d + (?: \ S + \ d +) * \ s + \ w +'] (http://regexstorm.net/tester?p=%5cd%2b (% 3f% 3a% 5cs% 2b % 5cd% 2b) *% 5cs% 2b% 5cw% 2b & i = 3 + пиво + 5 + курица + 65 + 9 + торты) regex. –

+0

Это просто пропущено мимо мяча. Теперь его соответствие '3 пива',' 5 курицы' и '65 9 тортов' вместо этого должно соответствовать' 3 пива', '5 куриных 65' и' 9 тортов'. –

Смежные вопросы