C# 如何将一串要点(包括标题和正文内容)拆分为多维数组?

C# 如何将一串要点(包括标题和正文内容)拆分为多维数组?,c#,.net,regex,string,split,C#,.net,Regex,String,Split,我从PDF文档中提取了一些文本,其中包含一系列要点,其中包含以下内容: 3法案提交给邮件委员会 Fitzgibbon先生(首席政府鞭)经许可,动议通过税法修正案(2011年) 《2011年第7号措施(修订)条例草案》将提交主要委员会进一步审议。 问题付诸表决并获得通过。 4《2011年公司修订(未来财务顾问)条例草案》 Shorten先生(金融服务和退休金部长)根据通知提出了一项法案 修订与财务咨询相关的法律的法案,以及相关目的。 文件 肖恩先生向该法案提交了一份解释性备忘录。 比尔读了第一遍。

我从PDF文档中提取了一些文本,其中包含一系列要点,其中包含以下内容:

3法案提交给邮件委员会
Fitzgibbon先生(首席政府鞭)经许可,动议通过税法修正案(2011年) 《2011年第7号措施(修订)条例草案》将提交主要委员会进一步审议。 问题付诸表决并获得通过。
4《2011年公司修订(未来财务顾问)条例草案》
Shorten先生(金融服务和退休金部长)根据通知提出了一项法案 修订与财务咨询相关的法律的法案,以及相关目的。 文件 肖恩先生向该法案提交了一份解释性备忘录。 比尔读了第一遍。 肖恩议员动议二读条例草案。 辩论中止(兰德尔先生),恢复辩论决定了第二天的日程 坐着。
5《2011年税法修正案(2011年第8号措施)条例草案》
Shorten先生(金融服务和退休金部长)提出了一项法案,要求修改法案 与税收有关的法律,以及用于相关目的的法律。 文件

我需要把它们分开,这样我就有了这样的每一个要点:

[0,0]=标题
[0,1]=主体
[1,0]=标题
[1,1]=主体

我修改了示例以包含一些真实世界的内容。

任何帮助都将不胜感激。
我正在使用.NET framework C#

您可以使用LINQ:

var result = input
    .Split(new[] { "\r\n" }, StringSplitOptions.None)
    .Where(x => !string.IsNullOrWhiteSpace(x))
    .GroupAdjacent((g, x) => !char.IsDigit(x[0]))
    .Select(g => new
    {
        Title = g.First().Trim(),
        Body = string.Join(" ", g.Skip(1).Select(x => x.Trim()))
    })
    .ToArray();
例如:

输出:

扩展方法:

公共静态IEnumerable组(
此IEnumerable源,Func(相邻)
{
var g=新列表();
foreach(源中的变量x)
{
如果(g.Count!=0&&!相邻(g,x))
{
收益率g;
g=新列表();
}
g、 加(x);
}
收益率g;
}
您可以使用LINQ:

var result = input
    .Split(new[] { "\r\n" }, StringSplitOptions.None)
    .Where(x => !string.IsNullOrWhiteSpace(x))
    .GroupAdjacent((g, x) => !char.IsDigit(x[0]))
    .Select(g => new
    {
        Title = g.First().Trim(),
        Body = string.Join(" ", g.Skip(1).Select(x => x.Trim()))
    })
    .ToArray();
例如:

输出:

扩展方法:

公共静态IEnumerable组(
此IEnumerable源,Func(相邻)
{
var g=新列表();
foreach(源中的变量x)
{
如果(g.Count!=0&&!相邻(g,x))
{
收益率g;
g=新列表();
}
g、 加(x);
}
收益率g;
}

2011和2012从何而来?现已修复。不应该在那里。这是一项一次性的任务,还是你需要反复做的事情?这是一件会反复做的事情,标题和内容会有所不同。这将是一项每天都会在新PDF到达时运行的任务。
2011
2012
来自哪里?现已修复。不应该在那里。这是一项一次性的任务,还是你需要反复做的事情?这是一件会反复做的事情,标题和内容会有所不同。这将是一个任务,将每天运行时,新的PDF的到来。这对我提供的样本工作。非常感谢。我想我必须修改这个问题,并提供一个不同的例子,因为它对我的PDF文本不起作用。我的错是没有提供一个更好的例子。这真的很有帮助。喜欢扩展方法。只需要做一些小的调整,以适应内容的发布方式。谢谢你!这对我提供的样本有效。非常感谢。我想我必须修改这个问题,并提供一个不同的例子,因为它对我的PDF文本不起作用。我的错是没有提供一个更好的例子。这真的很有帮助。喜欢扩展方法。只需要做一些小的调整,以适应内容的发布方式。谢谢你!
result[0] == { Title = "3 BILL REFERRED ...", Body = "Mr Fitzgibbon ..." }
result[1] == { Title = "4 CORPORATIONS ...",  Body = "Mr Shorten ..." }
result[2] == { Title = "5 TAX LAWS ...",      Body = "Mr Shorten ..." }
public static IEnumerable<IEnumerable<T>> GroupAdjacent<T>(
    this IEnumerable<T> source, Func<IEnumerable<T>, T, bool> adjacent)
{
    var g = new List<T>();
    foreach (var x in source)
    {
        if (g.Count != 0 && !adjacent(g, x))
        {
            yield return g;
            g = new List<T>();
        }
        g.Add(x);
    }
    yield return g;
}