Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取由逗号分隔的键值对的正则表达式_C#_Regex_Regex Group - Fatal编程技术网

C# 获取由逗号分隔的键值对的正则表达式

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

我想得到用逗号分隔的键值对的正则表达式

输入:“tag.Name:test,年龄:30,姓名:TestName123”

这是我迄今为止的尝试

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