Я предлагаю вам использовать регулярные выражения для этой цели. Вот пример:
string input = "4 Bob 32 Joe 64 Sue 123 Bill";
var matches = Regex.Matches(input, @"(?:(\d+) ([a-zA-Z]+))+");
for (int i = 0; i < matches.Count; i++)
{
Console.WriteLine("Number: {0} \t Person: {1}", matches[i].Groups[1], matches[i].Groups[2]);
}
напечатает:
Number: 4 Person: Bob
Number: 32 Person: Joe
Number: 64 Person: Sue
Number: 123 Person: Bill
При использовании регулярных выражений все, что вам нужно знать, это как выразить шаблон, которому вы хотите соответствовать. В этом случае вы хотите соответствовать:
[Number][Space][Letters]
один или несколько раз, верно? Это именно то, что это значит:
(\d+) ([a-zA-Z]+)
Редактировать 1:
В настоящий момент я не знаю, хотите ли вы ассоциировать с каждым человеком номер, который находится до или после каждого, но все, что вам нужно сделать, это поменять местами вышеприведенный шаблон, так что он станет:
(?:([a-zA-Z]+) (\d+))+
Редактировать 2:
Если вы хотите пропустить первый номер, вы можете использовать этот шаблон:
\d+ (?:([a-zA-Z]+) (\d+))+
, так что вы сопоставляете число (\d+
), затем пробел (
) и то же самое, что вы сопоставляли ранее (Name Number Name Number ...
)