leo*_*ora 24 .net c# string parsing
我有一个字符串,我正在从另一个系统中读取.它基本上是一个长字符串,表示由两者之间的空格分隔的键值对列表.它看起来像这样:
key:value[space]key:value[space]key:value[space]
Run Code Online (Sandbox Code Playgroud)
所以我编写了这段代码来解析它:
string myString = ReadinString();
string[] tokens = myString.split(' ');
foreach (string token in tokens) {
string key = token.split(':')[0];
string value = token.split(':')[1];
. . . .
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是一些值中有空格,所以我在顶部的"简单"分裂不再有效.我想知道如何解析键值对的列表(给定空格作为分隔符)现在我知道值字段中也可能有空格,因为拆分看起来不像它能够工作了.
注意:我现在确认KEYs中没有空格,所以我只需要担心这些值.为混乱道歉.
Epi*_*dex 22
使用此正则表达式:
\w+:[\w\s]+(?![\w+:])
Run Code Online (Sandbox Code Playgroud)
我测试了它
test:testvalue test2:test value test3:testvalue3
Run Code Online (Sandbox Code Playgroud)
它返回三个匹配:
test:testvalue
test2:test value
test3:testvalue3
Run Code Online (Sandbox Code Playgroud)
您可以更改\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();
Run Code Online (Sandbox Code Playgroud)
正如桑科所指出的那样,这个正则表达式将会失败:.如果您预测到这种情况,请使用\w+:[\w: ]+?(?![\w+:])正则表达式.当冒号value前面有空格时,这仍然会失败...我会考虑解决这个问题.
如果不将您从空格的分割更改为其他内容(例如"|"),则无法使用此功能.
考虑一下:
Alfred Bester:Alfred Bester Alfred:Alfred Bester
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |