我有一个正在从另一个系统读取的字符串。它基本上是一个长字符串,表示键值对列表,键值对之间用空格分隔。它看起来像这样:
key:value[space]key:value[space]key:value[space]
所以我写了这段代码来解析它:
string myString = ReadinString();
string[] tokens = myString.split(' ');
foreach (string token in tokens) {
string key = token.split(':')[0];
string value = token.split(':')[1];
. . . .
}
现在的问题是某些值中有空格,因此我在顶部的“简单化”拆分不再有效。我想看看我如何仍然能够解析出键值对列表(给定空格作为分隔符),因为我知道值字段中也可能有空格,因为 split 似乎无法做到工作了。
注意:我现在确认 KEY 中不会有空格,所以我只需要担心值。对造成的困惑表示歉意。
最佳答案
使用这个正则表达式:
\w+:[\w\s]+(?![\w+:])
我测试过
test:testvalue test2:test value test3:testvalue3
它返回三个匹配项:
test:testvalue
test2:test value
test3:testvalue3
您可以将 \w
更改为您输入中可能出现的任何字符集。
测试代码:
var regex = new Regex(@"\w+:[\w\s]+(?![\w+:])");
var test = "test:testvalue test2:test value test3:testvalue3";
foreach (Match match in regex.Matches(test))
{
var key = match.Value.Split(':')[0];
var value = match.Value.Split(':')[1];
Console.WriteLine("{0}:{1}", key, value);
}
Console.ReadLine();
正如 Wonko the Sane 指出的那样,此正则表达式将在包含 :
的值上失败。如果您预测到这种情况,请使用 \w+:[\w: ]+?(?![\w+:])
作为正则表达式。当 value
中的冒号前面有空格时,这仍然会失败......我会考虑解决这个问题。
关于c# - 在 C# 中解析此字符串的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6186531/