Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我需要将文本分成段落,以获得字符串列表。分隔符将以给定的模式重复_C#_Regex_String - Fatal编程技术网

C# 我需要将文本分成段落,以获得字符串列表。分隔符将以给定的模式重复

C# 我需要将文本分成段落,以获得字符串列表。分隔符将以给定的模式重复,c#,regex,string,C#,Regex,String,在本文中,有几行带有单词Feature,后面跟着几行,直到找到一个“(引号) 我感兴趣的是在这两个分隔符中间取一个部分。只要特征是那行中唯一的词。 例如: bla bla bla bla bla bla Feature bla bla bla bla bla bla bla bla Feature ble bla bla bla bla "bla bla bla bla bla blabla bla bla bla bla bla bla" Feature bla bla bla bla

在本文中,有几行带有单词Feature,后面跟着几行,直到找到一个“(引号)

我感兴趣的是在这两个分隔符中间取一个部分。只要特征是那行中唯一的词。

例如:

bla bla bla bla bla bla Feature
bla bla bla bla bla bla bla bla

Feature

ble bla bla bla bla

"bla bla bla bla bla blabla bla 
bla bla bla bla bla" Feature bla bla bla bla 

Feature 

bla bla bla bla bla

"bla bla bla bla bla blabla bla 
bla bla bla bla bla bla bla bla bla 
这方面的结果将是: 布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉

这种模式会反复出现,我需要提取单词Feature和following之间的部分,并将段落存储到列表中。 在网上,我只能找到一种方法来提取字符串,而不是它们的集合。当单词Features是行中唯一的单词时,我才提取它。 另外,拆分方法也不起作用,因为单词功能只需要在一行上,引号必须是下一行

另一个例子:

bla bla bla bla bla bla Feature
bla bla bla bla bla bla bla bla

Feature

ble bla bla bla bla

"bla bla bla bla bla blabla bla 
bla bla bla bla bla" Feature bla bla bla bla 

Feature 

bla bla bla bla bla

"bla bla bla bla bla blabla bla 
bla bla bla bla bla bla bla bla bla 
此项的输出将为: 咯咯咯咯,咯咯咯咯咯咯咯咯咯咯咯咯咯咯咯咯咯咯


感谢您的帮助

下面的代码应该会给出所需的结果。我将数据放入列表>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace ConsoleApplication86
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";

        static void Main(string[] args)
        {
            Boolean foundFeature = false;

            List<List<string>> data = new List<List<string>>();
            StreamReader reader = new StreamReader(FILENAME);
            string line = "";

            List<string> newFeature = null;
            while ((line = reader.ReadLine()) != null)
            {
                line = line.Trim();
                if (line.Length > 0)
                {
                    //ignore everything before 1st feature
                    if (foundFeature == false)
                    {
                        if (line.StartsWith("Feature"))
                        {
                            foundFeature = true;
                            newFeature = new List<string>();
                            data.Add(newFeature);
                        }
                    }
                    else
                    {
                        if (line.StartsWith("Feature"))
                        {
                            foundFeature = true;
                            newFeature = new List<string>();
                            data.Add(newFeature);
                        }
                        else
                        {
                            if(line.StartsWith("\""))
                            {
                                foundFeature = false;
                            }
                            else
                            {
                                newFeature.Add(line);
                            }
                        }
                    }
                }
            }

            reader.Close();


         }

    }



}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
命名空间控制台应用程序86
{
班级计划
{
常量字符串文件名=@“c:\temp\test.txt”;
静态void Main(字符串[]参数)
{
布尔foundFeature=false;
列表数据=新列表();
StreamReader=新的StreamReader(文件名);
字符串行=”;
List newFeature=null;
而((line=reader.ReadLine())!=null)
{
line=line.Trim();
如果(直线长度>0)
{
//忽略第一个功能之前的所有内容
如果(foundFeature==false)
{
if(行开始带(“特征”))
{
foundFeature=true;
newFeature=新列表();
data.Add(newFeature);
}
}
其他的
{
if(行开始带(“特征”))
{
foundFeature=true;
newFeature=新列表();
data.Add(newFeature);
}
其他的
{
if(第行开始使用(“\”))
{
foundFeature=false;
}
其他的
{
newFeature.Add(行);
}
}
}
}
}
reader.Close();
}
}
}

下面的代码应该给出所需的结果。我将数据放入列表>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace ConsoleApplication86
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";

        static void Main(string[] args)
        {
            Boolean foundFeature = false;

            List<List<string>> data = new List<List<string>>();
            StreamReader reader = new StreamReader(FILENAME);
            string line = "";

            List<string> newFeature = null;
            while ((line = reader.ReadLine()) != null)
            {
                line = line.Trim();
                if (line.Length > 0)
                {
                    //ignore everything before 1st feature
                    if (foundFeature == false)
                    {
                        if (line.StartsWith("Feature"))
                        {
                            foundFeature = true;
                            newFeature = new List<string>();
                            data.Add(newFeature);
                        }
                    }
                    else
                    {
                        if (line.StartsWith("Feature"))
                        {
                            foundFeature = true;
                            newFeature = new List<string>();
                            data.Add(newFeature);
                        }
                        else
                        {
                            if(line.StartsWith("\""))
                            {
                                foundFeature = false;
                            }
                            else
                            {
                                newFeature.Add(line);
                            }
                        }
                    }
                }
            }

            reader.Close();


         }

    }



}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
命名空间控制台应用程序86
{
班级计划
{
常量字符串文件名=@“c:\temp\test.txt”;
静态void Main(字符串[]参数)
{
布尔foundFeature=false;
列表数据=新列表();
StreamReader=新的StreamReader(文件名);
字符串行=”;
List newFeature=null;
而((line=reader.ReadLine())!=null)
{
line=line.Trim();
如果(直线长度>0)
{
//忽略第一个功能之前的所有内容
如果(foundFeature==false)
{
if(行开始带(“特征”))
{
foundFeature=true;
newFeature=新列表();
data.Add(newFeature);
}
}
其他的
{
if(行开始带(“特征”))
{
foundFeature=true;
newFeature=新列表();
data.Add(newFeature);
}
其他的
{
if(第行开始使用(“\”))
{
foundFeature=false;
}
其他的
{
newFeature.Add(行);
}
}
}
}
}
reader.Close();
}
}
}

这是否符合您的要求?它将捕获这些段落

Paragraph [0] - bla bla bla bla bla
Paragraph [1] - bla bla bla bla bla
如果需要捕获不同的位,可以调整正则表达式

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using CommandLine;
using CommandLine.Text;

namespace ConsoleApplication1
{
    class Program
    {

    static int Main(string[] args)
    {
        string input = @"bla bla bla bla bla bla Feature
bla bla bla bla bla bla bla bla

Feature

bla bla bla bla bla

""bla bla bla bla bla blabla bla 
bla bla bla bla bla"" Feature bla bla bla bla 

Feature 

bla bla bla bla bla

""bla bla bla bla bla blabla bla 
bla bla bla bla bla bla bla bla bla ";

        //Matches:
        //  Any line starting with Feature (with optional whitespace)                   ^\s*Feature
        //  followed by newline (with optional whitespace)                              \s*\r\n
        //  then capturing anything that isn't a quote "                                ([^""]*)
        //  then ending with a quote                                                    \""
        Regex r = new Regex(@"^\s*Feature\s*\r\n([^""]*)\""",RegexOptions.Singleline | RegexOptions.Multiline);

        List<string> paragraphs = new List<string>();

        foreach (Match match in r.Matches(input))
            paragraphs.Add(match.Groups[1].Value.Trim());

        for (int i = 0; i < paragraphs.Count; i++)
            Console.WriteLine("Paragraph [{0}] - {1}", i, paragraphs[i]);

        Console.Read();
        return 0;
    }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Text.RegularExpressions;
使用命令行;
使用CommandLine.Text;
命名空间控制台应用程序1
{
班级计划
{
静态int Main(字符串[]args)
{
字符串输入=@“bla bla bla bla bla bla bla bla bla功能
呜呜呜呜呜呜呜呜呜呜
特征
呜呜呜呜呜呜呜呜
“呜呜呜呜呜呜呜呜
布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉
特征
呜呜呜呜呜呜呜呜
“呜呜呜呜呜呜呜呜
布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉”;
//匹配项:
//任何以Feature开头的行(可选空格)^\s*Feature
//后跟换行符(带可选空格)\s*\r\n
//然后捕获任何不是引号的内容“([^”“]*)
//然后以引语结尾