C#正则表达式提取键值

标签 c# regex

是否有一种简单而优雅的方法可以从以下格式的字符串中提取键值对?

"key1='value1' key2='value 2' key3='value3' key4='value4' key5='5555' key6='xxx666'"

我的尝试导致了这个结果,但我对此不太满意

var regex = new Regex(@"\'\s", RegexOptions.None);
var someString = @"key1='value1' key2='value 2' key3='value3' key4='value4' key5='5555' key6='xxx666'" + " ";

var splitArray = regex.Split(someString);

IDictionary<string, string> keyValuePairs = new Dictionary<string, string>();

foreach (var split in splitArray)
{
    regex = new Regex(@"\=\'", RegexOptions.None);

    var keyValuArray = regex.Split(split);

    if (keyValuArray.Length > 1)
    {
        keyValuePairs.Add(keyValuArray[0], keyValuArray[1]);
    }

}

最佳答案

你应该能够在没有拆分的情况下做到这一点,而是使用 MatchCollection:

var rx = new Regex("([^=\\s]+)='([^']*)'");
var str = "key1='value1' key2='value 2' key3='value3' key4='value4' key5='5555' key6='xxx666'";
foreach (Match m in rx.Matches(str)) {
    Console.WriteLine("{0} {1}", m.Groups[1], m.Groups[2]);
}

Demo.

这个解决方案的核心是这个正则表达式:([^=\\s]+)='([^']*)' 它定义了键值对的结构:一系列非空格字符定义键,然后是等号,后跟用单引号括起来的值。此解决方案按顺序进行匹配,提取键和值,这些键和值按此顺序分配给匹配组 Group[1]Group[2]

关于C#正则表达式提取键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700562/

相关文章:

javascript - Match() 方法的正则表达式错误

javascript - String.fromCharCode(e.which) 无法识别点和逗号

JavaScript 正则表达式匹配 [[quote][/quote]]

regex - 实现词法分析器时 DFA 与正则表达式?

c# - 如何在 C# 中为泛型类型创建 Avro 模式?

c# - 使用空格反序列化标记的枚举会导致 SerializationException

c# - MongoDB C# Driver 2.1.0 - 解析引用

c# - 不同的十进制符号C#

c# - 在 WPF 应用程序中使用服务定位器模式时的 View 模型范围

Java - 如何测量匹配器处理