我正在尝试按行号拆分文本文件, 例如,如果我有像:
这样的文本文件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个字符),我需要一种有效的方式(如正则表达式)。
答案 0 :(得分: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"
),则会合并所有具有相同编号的区块。答案 1 :(得分:0)
您可以使用正则表达式,但Split不会运行得太好。您可以匹配以下模式:
^(\d).*$ # Match first line, capture number
([\r\n]+^\1.*$)* # Match additional lines that begin with the same number
示例:here
我确实尝试按$(?<=^(\d+).*)[\r\n]+^(?!\1)
拆分,但它将行号添加为数组中的附加元素。