首页 > 解决方案 > 从关联数组c#中检索值

问题描述

我被困在下一个问题上。

我从包含如下内容的文本文件中读取了一行:

(("ITEM" "05") ("NUMBER" "1") ("DESCRIPTION" "*RECHTE INSTEEKKOP. 1/4\"-8MM") ("ARTICLENUMBER" "S110010000104"))

在 Lisp 中,这是一个 List,用于在ITEMLisp 中检索 eg 的值:

(cadr (assoc "ITEM" str))

这给05

我怎样才能在 C# 中简单地实现这一点?

标签: c#lisp

解决方案


您可以使用 Regex 解析值,然后获取结果。例如,

var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
                                 .Cast<Match>()
                                .Select(x=>new {Key = x.Groups["Key"].Value,Value = x.Groups["Value"].Value,});

这将为您提供如下集合

在此处输入图像描述

您现在可以使用 Linq 获取 Key 等于“ITEM”的值。

var itemValue = valueCollection.First(x=>x.Key=="ITEM").Value;

或者,您可以将字符串转换为 Dictionary as

var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
                                 .Cast<Match>()
                                 .ToDictionary(x=>x.Groups["Key"].Value,y=>y.Groups["Value"].Value);

您现在可以将所需的ITEM值解析为

var itemValue = valueCollection["ITEM"];

根据评论更新

如果您期望空值,您可以使用以下正则表达式模式。

@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.*?(?=""))""\)"

推荐阅读