2013-03-06 44 views
0

我有不同的方式來它,例如解析字符串獲取所需信息

string str = " 

Description: 
TEXT,TEXT,TEXT,TEXT,TEXT,TEXT 

Note: 
TEXT1,TEXT1,TEXT1,TEXT1,TEXT1 

Description: 
TEXT2,TEXT2,TEXT2,TEXT2,TEXT2 

Note: 
TEXT3, TEXT3, TEXT3, TEXT3, TEXT3" 

一個字符串,我想以某種方式解析它來得到這樣的結果:

resultString1 = " 
Description: 
TEXT,TEXT,TEXT,TEXT,TEXT,TEXT 

Description: 
TEXT2,TEXT2,TEXT2,TEXT2,TEXT2" 

resultString2 = 
Note: 
TEXT1,TEXT1,TEXT1,TEXT1,TEXT1 

Note: 
TEXT3, TEXT3, TEXT3, TEXT3, TEXT3" 

已更新

我正在從文件中讀取此信息,所以字符串被一個循環填充,並且每個說明後都有一個新行,並且注意, 所以也許應該是小的算法,將讀到注意外表下,如果注意發現將讀取到下一個新行..類似的東西。

+1

你可以改變輸入呢?換行符是輸入的一部分嗎? – Bobson 2013-03-06 16:57:48

+0

另外,輸入文本是否有任何格式?它會始終是**說明>注**或者您可能會收到**說明>說明>注意**? – 2013-03-06 17:01:10

+0

聽起來像你想讀的完整生產線('ReadLine'),然後檢查:如果你的行中包含預定義項(注意,描述)中的一個,那麼下一行是一個值,並希望以後把它們放在一起。您可以使用多遍算法或使用緩衝區(存儲)來生成結果。可以直接或通過使用linq來完成。 – Sinatr 2013-03-06 17:01:20

回答

2

我看到你想要ordrer /削減你的內容。

這裏是一個可能的解決方案:

// string to sort/cut 
string str =" 
Description: 
TEXT,TEXT,TEXT,TEXT,TEXT,TEXT 

Note: 
TEXT1,TEXT1,TEXT1,TEXT1,TEXT1 

Description: 
TEXT2,TEXT2,TEXT2,TEXT2,TEXT2 

Note: 
TEXT3, TEXT3, TEXT3, TEXT3, TEXT3"; 

//List of string to retrieve tags descriptions 
List<String> tagsDescriptions = new List<String>(); 
//List of string to retrieve tags notes 
List<String> tagsNotes = new List<String>(); 

// Read str and get only the Description content 'sample' 
using (StringReader reader = new StringReader(text)) 
      { 
       string line; 
       bool getContent = false; 
       while ((line = reader.ReadLine()) != null) 
       { 
        if(getContent) 
        { 
         tagsDescription.Add(line); 
         getContent = false; 
        } 
        if(line.contain("Description")) 
        { 
         getContent = true; 

        } 
       } 
      } 
-1

您就可以使用兩個正則表達式來匹配你需要 爲了說明類似的字符串:Description:.\r*\n*.*

而對於注是這樣的:Note:\r*\n*.*

Regex regex = new Regex("Description:.\r*\n*.*"); 
     string str1 = @"Description: 
      TEXT,TEXT,TEXT,TEXT,TEXT,TEXT 

      Note: 
      TEXT1,TEXT1,TEXT1,TEXT1,TEXT1 

      Description: 
      TEXT2,TEXT2,TEXT2,TEXT2,TEXT2 

      Note: 
      TEXT3, TEXT3, TEXT3, TEXT3, TEXT3"; 
     string output = string.Empty; 
     foreach (var match in regex.Matches(str1)) 
     { 
      output += match; 
     } 


Regex regex = new Regex("Note:\r*\n*.*"); 
     string str1 = @"Description: 
      TEXT,TEXT,TEXT,TEXT,TEXT,TEXT 

      Note: 
      TEXT1,TEXT1,TEXT1,TEXT1,TEXT1 

      Description: 
      TEXT2,TEXT2,TEXT2,TEXT2,TEXT2 

      Note: 
      TEXT3, TEXT3, TEXT3, TEXT3, TEXT3"; 
     string output = string.Empty; 
     foreach (var match in regex.Matches(str1)) 
     { 
      output += match; 
     } 

隨着一點點的操作,你可以得到你的結果。

+0

這就是我的想法,只是想看看小例子 – inside 2013-03-06 17:09:19

+0

這應該是一個評論,不是答案 – 2013-03-06 17:10:51

+0

@AndreCalil其實,這是一個答案....錯誤作爲一個正則表達式是錯誤的,但它是一個回答 – 2013-03-06 17:11:52

0

你可以試試這個。我沒有測試過,效率不高。用它作爲指導。這假設你遵循格式說明:>>注意:你將不得不做類似的事情來獲得Note變量。 :

string input = @" 

Description: 
TEXT,TEXT,TEXT,TEXT,TEXT,TEXT 

Note: 
TEXT1,TEXT1,TEXT1,TEXT1,TEXT1 

Description: 
TEXT2,TEXT2,TEXT2,TEXT2,TEXT2 

Note: 
TEXT3, TEXT3, TEXT3, TEXT3, TEXT3"; 

int startPosition = 0; 
int descPosition = -1; 
string descriptionResults = ""; 

while (input.IndexOf("Description:", startPosition) > -1) 
{ 
    descPosition = input.IndexOf("Description:", startPosition); 
    int notePosition = input.IndexOf("Note:", startPosition); 

    descriptionResults += input.SubString(descPosition, notePosition); 
    startPosition = descPosition; 
} 
+0

現在會嘗試,並讓你知道結果...但我也很有趣的例子與正則表達式 – inside 2013-03-06 17:13:13