2016-07-20 4 views
-2

Я хотел бы сделать что-то вроде этого:добывающие строки между 2 символов - все вхождения

Моя строка Например: "что-то; 123: somethingelse; 156: somethingelse2; 589: somethingelse3"

Я хотел бы для получения массива со значениями, извлеченными из примера строки. Эти значения находятся между «;» и «:»: 123, 156, 589

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

string str = stringExample.Split(';', ':')[1]; 
string[i] arr = str; 

Спасибо за помощь.

+0

'Split' возвращает массив * *; так что вы можете циклически, как хотите, например. 'foreach (строковый элемент в stringExample.Split (';', ':')) {...}' –

+0

Проблема в том, что вы указываете индекс после разделения. Удалите '[1]', а затем 'str' будет' string [] ' –

ответ

0

Итак, вы хотите, чтобы извлечь все 3 числа, вы могли бы использовать этот подход:

string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
string[] allTokens = stringExample.Split(';', ':'); // remove [1] since you want the whole array 
string[] allNumbers = allTokens.Where(str => str.All(Char.IsDigit)).ToArray(); 

Результат является:

allNumbers {string[3]} string[] 
      [0] "123" string 
      [1] "156" string 
      [2] "589" string 
2

LINQ ваш друг здесь, что-то, как это будет делать:

str.Split(';').Select(s => s.Split(':')[0]).Skip(1) 
1

Вы можете использовать регулярные выражения следующим образом:

Regex r = new Regex(@";(\d+):"); 
string s = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
foreach(Match m in r.Matches(s)) 
    Console.WriteLine(m.Groups[1]); 

;(\d+): соответствует одному или более цифр, стоящих между ; и : и Groups[1] выбирает содержимое внутри brackest, Ergo цифры.

Выход:

123 
156 
589 

Чтобы получить эти строки в качестве использования массива:

string[] numberStrings = r.Matches(s).OfType<Match>() 
          .Select(m => m.Groups[1].Value) 
          .ToArray(); 
0

Это звучит как идеальный случай для регулярного выражения.

var sample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
    var regex = new Regex(@"(?<=;)(\d+)(?=:)"); 
    var matches = regex.Matches(sample); 

    var array = matches.Cast<Match>().Select(m => m.Value).ToArray(); 
1

Я хотел бы работать с именованными группами:

string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
Regex r = new Regex(";(?<digit>[0-9]+):"); 
foreach (Match item in r.Matches(stringExample)) 
{ 
    var digit = item.Groups["digit"].Value; 
} 
Смежные вопросы