【发布时间】:2019-02-28 15:08:52
【问题描述】:
我有两个这样的字符串列表:
var entities= new List<string>(){"101", "102", "103",};
var files= new List<string>(){"101_F05_20101001.csv", "102_F05_20101001.csv", "201_F05_20101001.csv", "202_F05_20101001.csv"};
我想得到按照这种模式相交的结果:
ID_F05_YYYYMMDD.csv
其中 ID 应与实体列表中的一项或多项匹配。
我写了以下代码:
var list = files
.Where(x => entities.Any(y => x.Contains(y) && x.Substring(0, y.Length) == y))
.ToList();
运行代码here.
但我想知道是否可以使用像这样的正则表达式来改进这一点:
var regex = new Regex(@"^(\d*)_F05_\d*\.csv$");
有可能吗?
【问题讨论】:
-
.Where(x => Regex.IsMatch(x, $@"^(?:{string.Join("|", entities)})_F05_\d*\.csv$"))? -
@WiktorStribiżew 它不起作用,找不到匹配项
-
顺便说一句,
csv或cvs?您的输入数据包含cvs,但您在模式中尝试了csv。 -
csv 格式,将修复
-
它正在工作!文件格式错误
标签: c# regex list intersection