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"

更新

我正在从文件中读取此信息,因此字符串由循环填充,并且每个描述和注释之后都有一个新行,因此可能应该是一个小算法,将读取直到下一次出现注释,如果找到注释会读到下一个新行..类似的东西。

4

4 回答 4

2

我看到您想要订购/剪切您的内容。

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

// 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;

                    }
                } 
            } 
于 2013-03-06T17:16:22.707 回答
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;
}
于 2013-03-06T17:11:31.063 回答
0

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

Description:\s*(.*)

只需抓住创建的组

这是结果匹配的链接。我不知道可以保存链接的.net 在线正则表达式测试器

于 2013-03-06T17:15:11.323 回答
-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;
        }

稍加操作,您就可以得到结果。

于 2013-03-06T17:07:55.400 回答