解析字符串以获取所需信息

时间:2013-03-06 16:54:21

标签: c# string parsing

我有一个包含不同信息的字符串,例如

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"

更新

我正在从文件中读取此信息,因此字符串由循环填充,并且每个描述后面都有一个新行,并且注意, 所以可能应该是小算法,直到下一次出现Note才会读到,如果找到Note会读到下一个新行......就像那样。

4 个答案:

答案 0 :(得分:2)

我看到你想要ordrer / cut你的内容。

这是一个可能的解决方案:

// 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 :(得分:0)

你可以试试这个。我没有对此进行测试,效率不高。用它作为指南。这假设您遵循以下格式说明:&gt;&gt;注意:。你必须做类似的事情才能获得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;
}

答案 2 :(得分:0)

使用以下正则表达式将起作用:

Description:\s*(.*)

抓住创建的群组

Here is a link to the resultant matching。我不知道.net的在线正则表达式测试器可以保存链接

答案 3 :(得分:-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;
        }

通过一点操作,您可以获得结果。