2014-01-24 3 views
4

У меня есть образец строковые данныеИзвлечение подстрок из большой строки C#?

string state="This item (@"Item.Price", "item") is sold with an price (@"Item.Rate", "rate") per (@"Item.QTY", "Qty")"; 

Я хочу вывод как

string subStr="Item.Price|Item.Rate|Item.QTY" 

Может кто-то пожалуйста, предложить какое-то решение. Я пытаюсь прочитать эти данные из файла. У меня есть пример кода, как

if (!string.IsNullOrEmpty(state) && state != null) 
     { 
      while (state.IndexOf("Value(@\"") > 0) 
      { 
       int firstindex = state.IndexOf("(@\""); 
       int secondindex = state.IndexOf("\", \""); 
       if (firstindex > 0 && secondindex > 0) 
       { 
        keys.Add(state.Substring(firstindex + 3, secondindex - firstindex - 8)); 
        state = state.Substring(secondindex + 3); 
       } 
      } 

     } 

Когда данные велико, то это исключение:

Length cannot be less than zero 

Может кто-нибудь предложить некоторые сопоставления с образцом механизма для этого.

+1

вы должны использовать регулярное выражение – giammin

+3

ошибка не потому, что ваш «данные большой» - ошибка совершенно ясно, что вы передаете число меньше нуля в качестве третьего параметра 'Подстрока'. Подумайте, как «secondindex - firstindex - 8» может оказаться меньше нуля и решить эту проблему. Кстати, ваша строка примера не включает значение «Значение (@» 'вообще ... – AakashM

+0

Обычно проверяют на> = 0. Он может найти строку в первой позиции (0). Может быть, в этом случае нет . -1 - не найдено. – Frode

ответ

4
var subStr = String.Join("|", Regex.Matches(state, @"@\""([\w\.]+)\""") 
           .Cast<Match>() 
           .Select(m => m.Groups[1].Value)); 

SubStr будет Item.Price|Item.Rate|Item.QTY

0

Попробуйте

string state="This item (@\"Item.Price\", \"item\") is sold with an price (@\"Item.Rate\", \"rate\") per (@\"Item.QTY\", \"Qty\")"; 

var regex=new Regex("\\(@\"(?<value>.*?)\","); 

string.Join(
      "|", 
      regex.Matches(state).Cast<Match>().Select(m => m.Groups["value"].Value) 
      ); 
Смежные вопросы