Skip to main content
 首页 » 编程设计

c#之为什么我的.NET正则表达式无法正常工作

2024年01月21日26davidwang456

我有一个文本文件,其格式为:

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之类的工具对其进行测试,这样可以节省大量时间。