1

我正在尝试按行号拆分文本文件,例如,如果我有如下文本文件:

1 ljhgk uygk uygghl \r\n
1 ljhg kjhg kjhg kjh gkj  \r\n
1 kjhl kjhl kjhlkjhkjhlkjhlkjhl  \r\n
2 ljkih lkjhl kjhlkjhlkjhlkjhl  \r\n
2 lkjh lkjh lkjhljkhl  \r\n
3 asdfghjkl  \r\n
3 qweryuiop  \r\n

我想把它分成 3 个部分(1,2,3),我该怎么做?文本的大小非常大(约 20,000,000 个字符),我需要一种有效的方法(如正则表达式)。

4

2 回答 2

1

另一个想法,您可以使用 linq 通过按每个第一个单词拆分来获取您所追求的组。请注意,这将占用每个第一个单词,因此请确保那里只有数字。这是使用 split/join 反模式,但它似乎在这里工作得很好。

var lines = from line in s.Split("\r\n".ToCharArray(), 
                                 StringSplitOptions.RemoveEmptyEntries)
            let lineNumber = line.Split(" ".ToCharArray(), 2).FirstOrDefault()
            group line by lineNumber
            into g
            select String.Join("\n", g);

笔记:

  • GroupBy被保证按照它们出现的顺序返回行。
  • 如果一个块出现不止一次(例如"1 1 2 2 3 3 1"),所有具有相同编号的块将被合并。
于 2012-06-06T07:29:59.590 回答
0

您可以使用正则表达式,但拆分不会很好。您可以匹配以下模式:

^(\d).*$          # Match first line, capture number
([\r\n]+^\1.*$)*  # Match additional lines that begin with the same number

示例:这里

我确实尝试过拆分$(?<=^(\d+).*)[\r\n]+^(?!\1),但它将行号添加为数组中的附加元素。

于 2012-06-06T06:51:01.013 回答