C# 获取由逗号分隔的键值对的正则表达式
我想得到用逗号分隔的键值对的正则表达式 输入:“tag.Name:test,年龄:30,姓名:TestName123” 这是我迄今为止的尝试C# 获取由逗号分隔的键值对的正则表达式,c#,regex,regex-group,C#,Regex,Regex Group,我想得到用逗号分隔的键值对的正则表达式 输入:“tag.Name:test,年龄:30,姓名:TestName123” 这是我迄今为止的尝试 string pattern = @".*:.*" (我猜。*多次表示任何内容,后跟:,如果我在末尾加逗号,* string模式=@“*:*,*” 我假设是一样的,但它对我不起作用,最终的结果可以用Linq实现,但我不想解析输入 我的输出样本 输入 string input = "tags.tagName:Tag1,tags.isRequired:fa
string pattern = @".*:.*"
(我猜。*多次表示任何内容,后跟:,如果我在末尾加逗号,*
string模式=@“*:*,*”
我假设是一样的,但它对我不起作用,最终的结果可以用Linq实现,但我不想解析输入
我的输出样本
输入
string input = "tags.tagName:Tag1,tags.isRequired:false"
var finaRes = input.Split(',').Select(x => x.Split(':')).Select(x => new { Key = x.First(), Value= x.Last()});
输出:
Key Value
---------------|-------
tags.tagName | Tag1
tags.isRequired| false
按照
/([^,]+):([^,]+)/g
的思路应该能够实现这一点。请注意,这将允许在键和值中使用空格
这将匹配每个键值对,每个匹配将包含2个组,组1为键,组2为值
下面是一个有用的工具,您可以使用它来查看它是如何工作和测试的:您可以使用这个正则表达式(演示是)
@AleksAndreev我没有看到你指的=分隔符是colon@AleksAndreev你说得对,我现在正在编辑这部分。为什么你要添加angular?@Heinrich,这是命名组语法。它允许你使用有意义的名称而不是索引来提取组,从而产生更具表现力和更易于理解的代码。
(?<key>[^:]+):(?<value>[^,]+),?
(?<key>[^:]+) // this will match a 'key' - everything until colon char
(?<value>[^,]+) // this will match a 'value' - everything until comma char
var regex = new Regex("(?<key>[^:]+):(?<value>[^,]+),?");
var input = "tag.Name:test,age:30,name:TestName123";
var matches = regex.Matches(input);
foreach (Match match in matches)
{
Console.Write(match.Groups["key"]);
Console.Write(" ");
Console.WriteLine(match.Groups["value"]);
}
tag.Name test
age 30
name TestName123