c# - 从关联数组c#中检索值
问题描述
我被困在下一个问题上。
我从包含如下内容的文本文件中读取了一行:
(("ITEM" "05") ("NUMBER" "1") ("DESCRIPTION" "*RECHTE INSTEEKKOP. 1/4\"-8MM") ("ARTICLENUMBER" "S110010000104"))
在 Lisp 中,这是一个 List,用于在ITEM
Lisp 中检索 eg 的值:
(cadr (assoc "ITEM" str))
这给05
我怎样才能在 C# 中简单地实现这一点?
解决方案
您可以使用 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>.*?(?=""))""\)"
推荐阅读
- javascript - 如何将表示多维数组的字符串解析为数组?
- c# - 在内存中加载相关对象(没有 ORM)
- c# - 控制台等待 KeyPress 但没有将任何键读入控制台缓冲区?
- java - 应用程序在 Glide 调用 submit().get() 时冻结
- html - 到父文件夹的相对链接不起作用
- javascript - 用javascript创建基本按钮
- windows - 如何修复 Windows 10 中的 Java rxtxSerial.dll 或 jSSC-2.7_x86_64.dll 串行端口错误?
- time-complexity - 在实践和理论中,我们在哪里划清 O(1) 和 O(n) 之间的界限?
- javascript - 在 `@media print` 中使用 CSS `*` 和 `:not()` 仍然可以显示一切。是什么原因?
- java - How to set the Title of a Frame in java via Combobox?