获取由逗号分隔的键值对的正则表达式
Get a regex expression for a key value pair separated by comma
我想获取以逗号分隔的键值对的正则表达式。
输入:"tag.Name:test,age:30,name:TestName123"
这是我目前的尝试
string pattern = @".*:.*"
(我猜 .* 多次表示任何内容,然后是 : 并且多次表示任何内容,如果我在末尾包含一个逗号,*
string pattern = @".*:.*,*"
我假设是同一件事,但它对我不起作用,最终结果可以用 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 是值。
这是一个有用的工具,您可以使用它来查看其工作原理并进行测试:https://regex101.com/r/m5KVfu/2
您可以使用这个正则表达式(演示是 here)
(?<key>[^:]+):(?<value>[^,]+),?
解释:
(?<key>[^:]+) // this will match a 'key' - everything until colon char
(?<value>[^,]+) // this will match a 'value' - everything until comma char
C# 示例:
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
如果您不介意冗长的正则表达式,这可能会有用:
((([a-zA-Z]*[0-9]*)*):([a-zA-Z0-9]+))(,([a-zA-Z]+[0-9]*)+:([a-zA-Z0-9]+))*
(([a-zA-Z]*[0-9]*)*)
键应该从字母开始,可以也可以不以数字结尾。
:
冒号,键值分隔符
([a-zA-Z0-9]+)
: value 可以包含任何顺序的字母数字字符,+ 表示 value 是必须的。
,([a-zA-Z]+[0-9]*)+:([a-zA-Z0-9]+))?
?最后表示第二个键值对可能存在也可能不存在。
,([a-zA-Z]+[0-9]*)+
第二个键应该从字母开始,可以也可以不以数字结尾。
,末尾的 + 表示如果有逗号则必须有第二个键。
:
冒号,键值分隔符
([a-zA-Z0-9]+)
:第二个键的强制值
我想获取以逗号分隔的键值对的正则表达式。
输入:"tag.Name:test,age:30,name:TestName123"
这是我目前的尝试
string pattern = @".*:.*"
(我猜 .* 多次表示任何内容,然后是 : 并且多次表示任何内容,如果我在末尾包含一个逗号,*
string pattern = @".*:.*,*"
我假设是同一件事,但它对我不起作用,最终结果可以用 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 是值。
这是一个有用的工具,您可以使用它来查看其工作原理并进行测试:https://regex101.com/r/m5KVfu/2
您可以使用这个正则表达式(演示是 here)
(?<key>[^:]+):(?<value>[^,]+),?
解释:
(?<key>[^:]+) // this will match a 'key' - everything until colon char
(?<value>[^,]+) // this will match a 'value' - everything until comma char
C# 示例:
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
如果您不介意冗长的正则表达式,这可能会有用:
((([a-zA-Z]*[0-9]*)*):([a-zA-Z0-9]+))(,([a-zA-Z]+[0-9]*)+:([a-zA-Z0-9]+))*
(([a-zA-Z]*[0-9]*)*)
键应该从字母开始,可以也可以不以数字结尾。
:
冒号,键值分隔符
([a-zA-Z0-9]+)
: value 可以包含任何顺序的字母数字字符,+ 表示 value 是必须的。
,([a-zA-Z]+[0-9]*)+:([a-zA-Z0-9]+))?
?最后表示第二个键值对可能存在也可能不存在。
,([a-zA-Z]+[0-9]*)+
第二个键应该从字母开始,可以也可以不以数字结尾。
,末尾的 + 表示如果有逗号则必须有第二个键。
:
冒号,键值分隔符
([a-zA-Z0-9]+)
:第二个键的强制值