【问题标题】:Split text from a string/file into a two-dimensional array based on "/n" and ". " for paragraphs and sentences.根据段落和句子的“/n”和“.”将字符串/文件中的文本拆分为二维数组。
【发布时间】:2015-01-23 17:10:46
【问题描述】:

我需要从文档或字符串(从用户粘贴的文本)中获取文本,并将其拆分为一个二维数组,其中每个部分是一个段落,其中的值是句子。如果这会影响任何事情,我会将其作为 winform 执行。

到目前为止,我已经有了它,所以我可以创建一个基本数组来保存每个段落的文本,以“\n”区分(这确实会导致标题等内容独立,但这很好)。但是我还需要将每个句子用“。”分隔,并形成提到的二维数组。

到目前为止我的代码是:

public void sentenceSplit()
    {
        content = File.ReadAllText(documentPath);
        content = Regex.Replace(content, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
        string[] paragraphs = content.Split('\n');            

        TextboxSummary.Text = string.Join("\n \n", paragraphs);
    }

需要正则表达式,因为它会删除完全空的行,否则由于双“\n”的情况而添加为数组条目。

我之前没有处理过创建这样的二维数组,并且不确定是否可以在我只声明 2 个拆分值而不是 1 的一行中完成。

【问题讨论】:

    标签: c# arrays regex string split


    【解决方案1】:

    看起来你可能想要一个锯齿状的数组,因为每个段落可以有不同数量的句子。交错数组可以被认为是数组的数组,并且与 C# 中的普通多维数组具有不同的语法。 MSDN for Jagged Arrays

    以下是我将如何使用锯齿状数组来解决您的问题。

    content = File.ReadAllText(documentPath);
    var paragraphs = content.split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
    
    string[][] results = new string[paragraphs.Length][];
    
    for(int i = 0; i < results.Length; i++)
    {
        results[i] = paragraphs[i].Split(new char[] {'.'}, StringSplitOptions.RemoveEmptyEntries);
    }
    

    您可以通过使用StringSplitOptions.RemoveEmptyEntries 配置选项避免使用正则表达式,因为它将删除所有仅包含空格的字符串,包括\n 字符串。

    现在,访问results[0] 将为您提供一个包含第一段中所有字符串的数组,依此类推。

    一些注意事项。没有一个句子不再有句号,但你可以很容易地把它们加回来。如果句号出现在句子的中间,比如十进制数字,这些将被视为单独的句子。我敢肯定,比我拥有更多正则表达式知识的人可以给你一个拆分正则表达式,它可以更好地找到句子的结尾。

    【讨论】:

    • 这听起来很完美,已经有一段时间了,忘记了 2d-array 每个需要相同数量的值。我还找到了一个应该充当“。”的正则表达式。唯一的问题是循环中不接受“StringSplitOptions”,从而给出错误“System.Array 不包含定义”。
    • ah 将其更改为逗号空格 StringSplitOptions,这似乎是正确的语法,然后这使得它在“new string[results.Length][];”处给出结果变量的错误因为它是一个“未分配的局部变量”
    • 这两个问题都是由拼写错误引起的。现在应该修复它们。最初有string[][] results = new string[results.Length][];,这没有任何意义。现在阅读string[][] results = new string[paragraphs.Length][];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2017-02-02
    相关资源
    最近更新 更多