我有一个包含以下内容的文件:
Message1 : Some Random String 1
Message2 : Some Random String 2
Message3 : Some Random String 3
Message4 : Some Random String 4
Message5 : Some Random String 5
我想知道如何在':'字符之后拆分每一行。
到目前为止我已经尝试过了,但我没有得到所需的输出:
string splitConfig() {
string split = ":";
string[] lines = File.ReadAllLines("config_file.cfg");
string linesJoined = lines[0] + "\n" + lines[1] + "\n" + lines[2] + "\n" + lines[3] + "\n" + lines[4];
string output = linesJoined.Substring(linesJoined.IndexOf(split) + split.Length);
return output;
}
这只是返回
"Some Random String 1
Message2 : Some Random String 2
Message3 : Some Random String 3
Message4 : Some Random String 4
Message5 : Some Random String 5"
但我正在寻找输出:
{
"Some Random String 1",
"Some Random String 2",
"Some Random String 3",
"Some Random String 4",
"Some Random String 5"
}
答案 0 :(得分:3)
这是另一个解决方案,只是为了好玩:
var result =
input.Split(new[] { " : ", "\n" }, StringSplitOptions.None)
.Where((x, i) => i % 2 == 1);
鉴于您的更新,您似乎已经将该文件读入表示每行的字符串数组中,因此您现在需要做的就是在每行:
之后获取该部分。你的算法并不遥远,但尝试使用一点Linq,就像这样:
string Char = ":";
string[] Messages = File.ReadAllLines(@"MessageMenu.cfg");
var Output = Messages.Select(s => s.Substring(s.IndexOf(Char) + Char.Length));
请注意,这不会返回单个字符串,而是IEnumerable<string>
,表示文件中的所有消息字符串。
答案 1 :(得分:1)
也许:
var result = input.Split('\n')
.Select(x => x.Substring(x.IndexOf(":") + 2));
答案 2 :(得分:1)
你的要求有点难以理解,但我相信这会给你你想要的东西:
var messages = input.Split(new []{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
.Select(l => l.Split(' : ')[1])
.ToList();
答案 3 :(得分:0)
或者...
string sourceText = @"
Message1 : Some Random String 1
Message2 : Some Random String 2
Message3 : Some Random String 3
Message4 : Some Random String 4
Message5 : Some Random String 5
" ;
Regex rx = new Regex( @"^\s*(.*?)\s+:\s+(.*?)\s+$" , RegexOptions.Multiline ) ; // using non-greedy accumulation here (.*?) to reduce backtracking
Dictionary<string,string> messages = rx
.Matches(sourceText)
.Cast<Match>()
.ToDictionary(
m => m.Groups[1].Value ,
m => m.Groups[2].Value
) ;