我有一个文本文件,其格式为:
key1:val1,
key2:val2,
key3:val3
我正在尝试使用正则表达式解析键/值对。这是我在同一示例中使用的正则表达式代码:
string input = @"key1:val1,
key2:val2,
key3:val3";
var r = new Regex(@"^(?<name>\w+):(?<value>\w+),?$", RegexOptions.Multiline | RegexOptions.ExplicitCapture);
foreach (Match m in r.Matches(input))
{
Console.WriteLine(m.Groups["name"].Value);
Console.WriteLine(m.Groups["value"].Value);
}
当我循环遍历
r.Matches时,有时某些键/值对不会出现,并且似乎是在行尾带有逗号的键对-但我应该在
,?中考虑到这一点。我在这里想念什么?
请您参考如下方法:
问题在于您的正则表达式与前两行中的换行符不匹配。
尝试将其更改为
@"^(?<name>\w+):(?<value>\w+),?(\n|\r|\r\n)?$"
它应该工作。
顺便说一句,我喜欢正则表达式,但是鉴于您要解决的问题,请使用string.Split解决方案。它将更容易阅读...
编辑:在阅读您的评论后,您说这是问题的简化版本,然后您可以通过在匹配末尾为空格/换行符添加一些“公差”来简化表达式
@"^(?<name>\w+):(?<value>\w+),?\s*$"
另外,在使用正则表达式时,请使用 Expresso之类的工具对其进行测试,这样可以节省大量时间。
