2014-09-02 3 views
0

Просто нужно немного нажать здесь. У меня есть файл с данными, какНайти все строки после строки

xyz buildinfo app_id="12345" asf 
sfsdf buildinfo app_id="12346" wefwef 
... 

мне нужно получить массив строк с номером следующей app_id =. Ниже код дает мне все совпадения, и я могу получить счет (Regex.Matches (text, searchPattern) .Count). Но мне нужны фактические элементы в массиве.

string searchPattern = @"app_id=(\d+)"; 
       var z = Regex.Matches(text, searchPattern); 
+1

'новый Regex (searchPattern) .Match (текст) .Captures' (или' .Groups') – knittl

+0

Вам действительно нужно Regex, или вы в равной степени подойдете к строковым методам? – terrybozzio

ответ

0

Я думаю, что вы хотите сказать, что вы хотите детали (номера) без APP_ID части. Вы хотите использовать Positive Lookbehind

string text = @"xyz buildinfo app_id=""12345"" asf sfsdf buildinfo app_id=""12346"" wefwef"; 
string searchPattern = @"(?<=app_id="")(\d+)"; 
var z = Regex.Matches(text, searchPattern) 
       .Cast<Match>() 
       .Select(m => m.Value) 
       .ToArray(); 

(?<=app_id="") будет соответствовать шаблону, но не включать его в захвате

+0

Это работает отлично! Но он выбирает строки, такие как app_id = 12345. Мне просто нужен номер. Как я могу изменить RE. Или я должен использовать Replace на Select – mhn

+0

, я вижу проблему. Я все еще использовал один и тот же RE – mhn

0

Вы можете взглянуть на documentation.

Цитируя его вы можете использовать этот код:

string pattern = @"app_id=(\d+)"; 
    string input = "xyz buildinfo app_id="12345" asf sfsdf buildinfo app_id="12346" efwef"; 

    Match match = Regex.Match(input, pattern); 
    if (match.Success) { 
    Console.WriteLine("Matched text: {0}", match.Value); 
    for (int ctr = 1; ctr <= match.Groups.Count - 1; ctr++) { 
     Console.WriteLine(" Group {0}: {1}", ctr, match.Groups[ctr].Value); 
     int captureCtr = 0; 
     foreach (Capture capture in match.Groups[ctr].Captures) { 
      Console.WriteLine("  Capture {0}: {1}", 
          captureCtr, capture.Value); 
      captureCtr += 1;     
     } 
    } 
    } 
Смежные вопросы