我有字符串值和字符串筛选器的列表(可能包含一个或两个单词)。我想从这个字符串列表中检索所有不同的值,直到只有过滤器中的单词。
我有以下清单:
DEPRI-LOOP 15502 Bulk
DELETE-LOOP 15500 PAIL
DELETE-LOOP 15667 PAIL
OBSOLATE-LOOP 15834 PAIL
DO NOT USE - LOOP 15835 Conc Bulk
LOOP 15000 Bulk
LOOP 15000 Drum, Stg
LOOP 15002 Bulk
LOOP 15002 Drum, Stg
LOOP 15002 LA
LOOP 15250B Bulk
LOOP 15250C Conc Mat
LOOP 15250D Bulk
LOOP 15250D Drum, Stg
LOOP 15400 Bulk
LOOP 15400 Bulk Mat
LOOP 15400 Drum, Stg
LOOP 15500 Bulk
LOOP 15500 Conc Mat
LOOP 15500 Conc Filt Bulk
LOOP 15500 Bulk Mat
LOOP 15500 Drum, Stg
LOOP 15500 IBC BR
LOOP 15500 LA
LOOP 15667 Bulk
LOOP 15667 Conc Mat
LOOP 15667 Conc Filt Bulk
LOOP 15667 Drum, Stg
LOOP 15668 Bulk
LOOP 15668 Conc Bulk
LOOP 15668 Drum, Stg
LOOP 15668D Bulk
LOOP 15668D Drum, Stg
LOOP 15833 Bulk
LOOP 15833 Drum, Stg
LOOP 15834 Bulk
LOOP 15835 Bulk字符串过滤器值为“循环15",那么我的结果集将包含以下列表:
LOOP 15502
LOOP 15500
LOOP 15667
LOOP 15834
LOOP 15835
LOOP 15000
LOOP 15002
LOOP 15250B
LOOP 15250C
LOOP 15250D
etc. 既然,过滤器字符串包含两个单词,我只需要采取两个不同的词。我在这个问题上苦苦挣扎,找不到合适的解决办法。
发布于 2022-11-23 20:10:35
您可以使用正则表达式来匹配筛选器,并根据单词边界返回单词。只需一点LINQ就可以得到不同的值:
class Program
{
public static void Main(string[] args)
{
List<String> data = BuildList();
String filter = "LOOP 15";
String regexPattern = @"\b\w*" + filter + @"\w*\b";
var results = data.Where(line => Regex.IsMatch(line, regexPattern)).Select(line => Regex.Match(line, regexPattern).Value).Distinct();
foreach (String match in results)
{
Console.WriteLine(match);
}
Console.WriteLine("Press Enter to Quit.");
Console.ReadLine();
}
private static List<String> BuildList()
{
List<String> values = new List<String>();
values.Add("DEPRI-LOOP 15502 Bulk");
values.Add("DELETE-LOOP 15500 PAIL");
values.Add("DELETE-LOOP 15667 PAIL");
values.Add("OBSOLATE-LOOP 15834 PAIL");
values.Add("DO NOT USE - LOOP 15835 Conc Bulk");
values.Add("LOOP 15000 Bulk");
values.Add("LOOP 15000 Drum, Stg");
values.Add("LOOP 15002 Bulk");
values.Add("LOOP 15002 Drum, Stg");
values.Add("LOOP 15002 LA");
values.Add("LOOP 15250B Bulk");
values.Add("LOOP 15250C Conc Mat");
values.Add("LOOP 15250D Bulk");
values.Add("LOOP 15250D Drum, Stg");
values.Add("LOOP 15400 Bulk");
values.Add("LOOP 15400 Bulk Mat");
values.Add("LOOP 15400 Drum, Stg");
values.Add("LOOP 15500 Bulk");
values.Add("LOOP 15500 Conc Mat");
values.Add("LOOP 15500 Conc Filt Bulk");
values.Add("LOOP 15500 Bulk Mat");
values.Add("LOOP 15500 Drum, Stg");
values.Add("LOOP 15500 IBC BR");
values.Add("LOOP 15500 LA");
values.Add("LOOP 15667 Bulk");
values.Add("LOOP 15667 Conc Mat");
values.Add("LOOP 15667 Conc Filt Bulk");
values.Add("LOOP 15667 Drum, Stg");
values.Add("LOOP 15668 Bulk");
values.Add("LOOP 15668 Conc Bulk");
values.Add("LOOP 15668 Drum, Stg");
values.Add("LOOP 15668D Bulk");
values.Add("LOOP 15668D Drum, Stg");
values.Add("LOOP 15833 Bulk");
values.Add("LOOP 15833 Drum, Stg");
values.Add("LOOP 15834 Bulk");
values.Add("LOOP 15835 Bulk");
return values;
}
}输出:
LOOP 15502
LOOP 15500
LOOP 15667
LOOP 15834
LOOP 15835
LOOP 15000
LOOP 15002
LOOP 15250B
LOOP 15250C
LOOP 15250D
LOOP 15400
LOOP 15668
LOOP 15668D
LOOP 15833
Press Enter to Quit.https://stackoverflow.com/questions/74545861
复制相似问题