如何使用正则表达式比较两个列表?

时间:2018-07-27 09:35:21

标签: c# regex string list

我有两个列表,

  1. List<string>IDList //DM-0016 (ID:225),LPG Test (ID:232), 18S1(ID:290)..
  2. List<string>Names // DM-0016,LPG Test, 18S1..

第二个列表与第一个列表基本相同,但是没有ID。 我在“多项选择”对话框中显示第二个列表,用户可以在其中选择多个项目。

我有一个正则表达式(@"(?<=\(ID:)[0-9]+");,它只返回(ID :)内部的数字

我想基于此RegEX比较这两个列表,在这里,我只想要所选项目的ID。

例如::如果选择了 DM-0061 ,我将得到 225

1 个答案:

答案 0 :(得分:3)

如果使用正则表达式,例如:

(?<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

实时示例:http://rextester.com/PMTUFW14656