c# - 在 C# 中解析此字符串的最佳方法是什么?

标签 c# .net string parsing

我有一个正在从另一个系统读取的字符串。它基本上是一个长字符串,表示键值对列表,键值对之间用空格分隔。它看起来像这样:

 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/

相关文章:

java - 如何获取字符串数组中的数字并将它们放入 int 数组中

java - 矩阵到字符串输出

c# - 将数据库 A 与从数据库 B(Web 服务)检索的 xml 数据同步,并插入、更新、删除缺失的列

c# - 发布Web API时Dotnet发布不会创建文件夹

jquery - ASP.Net 服务器控制、回发架构在当前的 Web 2.0 世界中失败了吗?

java - 为什么在这种情况下不能使用子字符串?

c# - 将委托(delegate)(带参数)作为参数传递

c# - Visual Studio 将类的所有属性转储到编辑器中

c# - 为什么 Roslyn 在这里生成 > 比较而不是 != 比较?

c# - C#中如何四舍五入到任意数字?