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

标签 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

最佳答案

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

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

关于c# - 如何使用正则表达式比较两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555021/

相关文章:

c# - 没有指定 authenticationScheme,也没有找到基于自定义策略的授权的 DefaultForbidScheme

c# - 如何创建初始化程序来创建和迁移 mysql 数据库?

regex - 如何在word中使用VBA(宏)使用/启用(RegExp对象)正则表达式

c# - 将 XML 文件显示到列表框中

c# - 从 C# 代码隐藏错误创建 ASP.NET 控件

java - java中 "To"的正则表达式

c# - 更新了信用卡类型的 BIN/IIN 范围

java - 字符串到公钥

regex - 在perl中分割包含经度或纬度表达式的字符串

C# - 更改小数位数