在文本文件中的特定标记之间提取内容 - C#

时间:2016-12-01 00:55:46

标签: c# regex

我有一个包含以下信息的文本文件:

message = pyzmail.PyzMessage.factory(rawMessages[5484]['BODY[]'])
KeyError: 5484

基于stackflow社区的帮助,我现在能够读取整个文件。我还发现要在标记之间提取内容,例如ALLOC apple1 orange1 banana1 ALLOC apple2 orange2 banana2 ALLOC apple3 orange3 banana3 ,我可以写:

ALLOC

但这会给我var filelocation = @"c:\Fruits.txt"; var sectionLines = File.ReadAllLines(filelocation).TakeWhile(l => !l.StartsWith("ALLOC"));

IEnumerable<string>

如何创建3个单独的字符串

apple1
orange1
banana1    
apple2
orange2
banana2    
apple3
orange3

简而言之,需要在标签之间提取内容。

2 个答案:

答案 0 :(得分:3)

以下是一些如何返回所需结果的方法:

string[] words = { "ALLOC", "apple1", "orange1", "banana1", "ALLOC", "apple2", "orange2", "banana2", "ALLOC" };

var result = string.Join(" ", words)
        .Split(new string[] { "ALLOC" }, StringSplitOptions.RemoveEmptyEntries)            
        .Select(p => p.Trim(' '));

首先,我正在制作所有单词的单个字符串。比我分手“ALLOC”,并选择修剪过的琴弦。

结果是:

string[] result = { "apple1 orange1 banana1", "apple2 orange2 banana2" };

根据您的情况

var filelocation = @"c:\Fruits.txt";
var allLines = File.ReadAllLines(filelocation);
var sectionLines = string.Join(" ", allLines)
            .Split(new string[] { "ALLOC" }, StringSplitOptions.RemoveEmptyEntries)            
            .Select(p => p.Trim(' '));

答案 1 :(得分:1)

这可能会为你做到这一点

str.slice(0, num > 3 ? num - 3 : num)

在这里,我们使用string fullstr = File.ReadAllText("c:\\Fruits.txt"); string[] parts = fullstr.Split(new string[] { "ALLOC" }, StringSplitOptions.RemoveEmptyEntries); List<string> outputstr = new List<string>(); foreach(string p in parts) { outputstr.Add(p.Replace("\r\n", " ").Trim(' ')); } 一次性阅读所有文字,然后将其与File.ReadAllText分开,然后在ALLOC中通过替换新的outputstr添加分割后的字符串用空格划线并修剪结果。

Here is the screenshot of the result