【问题标题】:c# extract key value pairs from a stringc# 从字符串中提取键值对
【发布时间】:2015-11-02 15:40:37
【问题描述】:

我需要解析更长的内容块:

内容块 1 内容块 2 key1="value1" key2="val2" 一些其他内容 内容块 3 key3="value3" 其他内容 更多内容

我需要获取字典或任何可以循环的结构(数组、集合等)。 到目前为止,我正在研究两个选项:正则表达式或某种拆分为数组。

【问题讨论】:

  • 你的问题是什么?
  • 抱歉,问题是如何提取对 (key1,value1), (key2,value2), (key3, value3) ?

标签: .net arrays regex replace


【解决方案1】:

大概是这样的:

string text = @"
        content block 1
        content block 2 key1=""value1"" key2=""val2"" some other content
        content block 3 key3=""value3"" other content
        more content 
    ";
    var pattern = @"(?<key>\w+)\s*=\s*""(?<value>[^""]*)""";
    var matches = Regex.Matches(text, pattern);

    var dictionary = new Dictionary<string, string>();

    foreach (Match match in matches)
        dictionary.Add(match.Groups["key"].Value, match.Groups["value"].Value);

您可能需要微调模式。对于密钥,它抓取集合[A-Za-z0-9_] 中的任何内容,然后是= 符号。

值是= 符号后面的引号内的任何不是" 的值。但是,如果您的值字符串中可以包含"s,则需要对此进行调整。

它还允许= 周围的可选空格,但如果需要,您可以将其收紧。

【讨论】:

  • 这可能是最接近我正在寻找的东西,它向我证实了我必须分两步完成,而不是一口气完成所有事情
【解决方案2】:

试试这个模式:

(\w+)="(.+?)"

然后遍历每个匹配项并提取Group[1].Value(键)、Group[2].Value(值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多