如何分隔字符串中的段落

时间:2013-01-28 15:04:58

标签: c# regex string escaping string-literals

大家好我真的需要你的帮助。我试图采用一个多行字符串,该字符串由几段结尾,并将其分成几个单独的文本。

我意识到每当我跳过一条线时,就会有一系列的\ n \ r。之后我认为每个新行以\ n开头并以\ r结尾。为此,我写了下面的代码。

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

namespace ConsoleApplication15
{
   class Program
   {
    struct ParagraphInfo
    {
        public ParagraphInfo(string text)
        {
            int i;
            Text = text;
            i = text.IndexOf('.');
            FirstSentence = text.Substring(0, i);
        }

        public string Text, FirstSentence;
    }

    static void Main(string[] args)
    {
        int tmp = 0;
        int tmp1 = 0;
        string MultiParagraphString = @"AA.aa.

BB.bb.

CC.cc.

DD.dd.

EE.ee.";

        List<ParagraphInfo> Paragraphs = new List<ParagraphInfo>();

        Regex NewParagraphFinder = new Regex(@"[\n][\r]");
        MatchCollection NewParagraphMatches = NewParagraphFinder.Matches(MultiParagraphString);


        for (int i = 0; i < NewParagraphMatches.Count; i++)
        {
            if (i == 0)
            {
                Paragraphs.Add(new ParagraphInfo((MultiParagraphString.Substring(0, NewParagraphMatches[0].Index))));
            }
            else if (i == (NewParagraphMatches.Count - 1))
            {
                tmp = NewParagraphMatches[i].Index + 3;
                tmp1 = MultiParagraphString.Length - NewParagraphMatches[i].Index - 3;
                Paragraphs.Add(new ParagraphInfo(MultiParagraphString.Substring(tmp, tmp1)));
            }
            else
            {
                tmp = NewParagraphMatches[i].Index + 3;
                tmp1 = NewParagraphMatches[i + 1].Index - NewParagraphMatches[i].Index+3;
                Paragraphs.Add(new ParagraphInfo(MultiParagraphString.Substring(tmp, tmp1)));
            }
        }

        Console.WriteLine(MultiParagraphString);
        foreach (ParagraphInfo Paragraph in Paragraphs)
        {
            Console.WriteLine(Paragraph.Text);

        }


    }
}
}

当我在整个文本中一个接一个地打印段落的每个成员时,出现了一些相当奇怪的东西。段落列表的输出是:

AA.aa。


CC.cc。

DD


DD.dd。

EE


EE.ee。


我无法理解为什么会这种情况继续发生,而且我无法弄清楚为什么输出每次都如此不同。

对不起,如果这是一团糟,但我真的需要一些帮助。 顺便说一句,如果有人有更好的想法,可以随意分享..

谢谢

3 个答案:

答案 0 :(得分:3)

您可以尝试以下方法:

MultiParagraphString.Split(new [] {Environment.NewLine}, 
           StringSplitOptions.RemoveEmptyEntries);

这将返回IEnumerable<String>。如果您想将它们转换为结构,请使用Select

MultiParagraphString.Split(new [] {Environment.NewLine}, 
           StringSplitOptions.RemoveEmptyEntries)
          .Select(s => new ParagraphInfo(s)).ToList();

答案 1 :(得分:0)

  

我认为每个新行都以\ n开头,以\ r

结束

没有。 \r\n是用于表示Windows(和其他非Unix)系统中的新行的双字符序列。它不表示段落的“开始”和“结束”。

要分为段落,您可以使用string.Split()

string[] paragraphs = MultiParagraphString.Split(new string[]{"\r\n"},
                           StringSplitOptions.RemoveEmptyEntries);

答案 2 :(得分:0)

 string text = richTextBox1.Text;

您可以使用以下内容忽略段落:

text = text.Replace((char)10, ' ');

您可以使用以下方法检测paragraps:

string[] words = s.split('');
foreach (string word in words)
{
if (word.Contains((char)10))
{
MessageBox.Show("A paragraph is here (with brillant English accent)");
}

注意:此代码仅在段落通过文本上的输入键分隔时才有效。