c# - 如何使用正则表达式比较两个列表?
问题描述
我有两个清单,
List<string>IDList //DM-0016 (ID:225),LPG Test (ID:232), 18S1(ID:290)..
List<string>Names // DM-0016,LPG Test, 18S1..
第二个列表与第一个基本相同,但没有 ID。我在多选对话框中显示第二个列表,用户可以在其中选择多个项目。
我有一个正则表达式(@"(?<=\(ID:)[0-9]+");
这只返回里面的数字(ID :)
我想根据这个 RegEX 比较这两个列表,在哪里,我只想要所选项目的 ID。
例如:如果选择DM-0061我会得到225。
解决方案
如果您使用正则表达式,例如:
(?<key>.*?)\s\(ID:(?<value>[0-9]+)\)
此正则表达式转换为
- 一个命名的捕获组
key
,包括:- 任意字符任意次数的重复,但尽可能少
- 空白
- 文字
(ID:
- 一个命名的捕获组
value
,包括:- 任意次数,一次或多次重复
- 文字
)
您可以将原始列表投影到字典并轻松将其用作查找:
var list = new List<string>(){
"DM-0016 (ID:225)","LPG Test (ID:232)", "18S1 (ID:290)"
};
var regex = new Regex(@"(?<key>.*?)\s\(ID:(?<value>[0-9]+)\)");
var dict = list.Select(i => regex.Match(i))
.ToDictionary(
k => k.Groups["key"].Value,
v => v.Groups["value"].Value);
Console.WriteLine(dict["DM-0016"]); // writes 225