我有一个附有时间戳的文件列表。我还有另一个包含正则表达式模式的列表。我想验证&reffiles'中的所有模式。存在于'文件'不是。
以下是样本文件
List<string> files = new List<string>();
files.Add("AB_DBER_2016101194814.txt");
files.Add("AB_EBER_2016101194815.txt");
files.Add("AB_FBER_2016101194811.txt");
这是参考模式:
List<string> refFiles = new List<string>();
refFiles.Add("AB_DBER_[0-9]{13,13}.txt");
refFiles.Add("AB_EBER_[0-9]{13,13}.txt");
refFiles.Add("AB_FBER_[0-9]{13,13}.txt");
我想做类似的事情:
foreach (var file in refFiles )
{
//if file has a match in files then I need to do some code
}
我想知道如何在第二个列表中找到正则表达式模式,以验证第一个列表中是否存在匹配的patern。
答案 0 :(得分:5)
这是一种通用方法,you can fiddle here。
请注意您的正则表达式的更改。它在文字\.
字符串中使用.
而不是@
;这将匹配句点instead of the wildcard character class。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
List<string> files = new List<string>();
files.Add("AB_DBER_2016101194814.txt");
files.Add("AB_EBER_2016101194815.txt");
files.Add("AB_FBER_2016101194811.txt");
// the following will not match
files.Add("AB_FBER_20161011948111txt");
files.Add("This_Does_Not_Match.txt");
List<string> refFiles = new List<string>();
refFiles.Add(@"AB_DBER_[0-9]{13,13}\.txt");
refFiles.Add(@"AB_EBER_[0-9]{13,13}\.txt");
refFiles.Add(@"AB_FBER_[0-9]{13,13}\.txt");
foreach (var pattern in refFiles)
{
var regex = new Regex(pattern);
foreach (var file in files)
{
if (regex.IsMatch(file))
{
Console.WriteLine(file);
}
}
}
}
}
您还可以use LINQ:
foreach (var file in files)
{
if (refFiles.Any(pattern => Regex.IsMatch(file, pattern)))
{
Console.WriteLine(file);
}
}
在这两种情况下,这都是输出:
AB_DBER_2016101194814.txt
AB_EBER_2016101194815.txt
AB_FBER_2016101194811.txt
答案 1 :(得分:1)
此代码适用于我
var files = new List<string>
{
"AB_DBER_2016101194814.txt",
"AB_EBER_2016101194815.txt",
"AB_FBER_2016101194811.txt"
};
var refFiles = new List<string>
{
"AB_DBER_[0-9]{13,13}.txt",
"AB_EBER_[0-9]{13,13}.txt",
"AB_FBER_[0-9]{13,13}.txt"
};
foreach (var patternFile in refFiles)
{
var regularExp = new Regex(patternFile);
foreach (var file in files)
{
if (regularExp.IsMatch(file))
{
Console.WriteLine(file);
}
}
}