我的目录预计有21个文件,范围从0到20.文件以下划线结尾,数字在0 - 20之间(可能是格式_01或_1),命名约定如下:
DirectoryName_00.txt, DirectoryName_01.txt,..., DirectoryName_20.txt
要么DirectoryName_0.txt, DirectoryName_1.txt,..., DirectoryName_20.txt
我想找出目前正在使用的文件,我正在使用下面的代码段:
for (int pageNum = 0; pageNum <= 20; pageNum++)
{
//templateFiles is list of files in that directory
string expectedTemplateName = string.Format("{0}_{1}.txt", directoryName, pageNum.ToString("00"));
templateFiles.Any(file => file.Equals(expectedTemplateName, StringComparison.OrdinalIgnoreCase));
}
但是通过这种方法,我被限制为格式为00,01,02,03 ... 20的搜索文件,并且无法以格式0,1,2,3 ... 20搜索文件。 是否有任何简短的方法可以搜索两种格式的文件(可能使用RegEx)。
答案 0 :(得分:2)
做两次,
for (int pageNum = 0; pageNum <= 20; pageNum++)
{
//templateFiles is list of files in that directory
string expectedTemplateName1 = string.Format("{0}_{1}.txt", directoryName, pageNum.ToString());
string expectedTemplateName2 = string.Format("{0}_{1}.txt", directoryName, pageNum.ToString("00"));
templateFiles.Any(file =>
(file.Equals(expectedTemplateName1, StringComparison.OrdinalIgnoreCase) ||
file.Equals(expectedTemplateName2, StringComparison.OrdinalIgnoreCase)));
}
答案 1 :(得分:2)
在这种情况下,正则表达式可能不是最好的工具,这就是为什么我会选择@ kennyzx的直接方法。如果你拼命想要使用正则表达式,你可以使用以下内容;但要注意,这比直接字符串比较慢了800% - 也不一定更容易理解。
for (int pageNum = 0; pageNum <= 20; pageNum++)
{
var regex = new Regex(string.Format(@"^{0}_(?:{1}|{1:00})\.txt$", directoryName, pageNum), RegexOptions.IgnoreCase);
templateFiles.Any(file => regex.IsMatch(expectedTemplateName, StringComparison.OrdinalIgnoreCase));
}
答案 2 :(得分:0)
类似的东西:
var re = new Regex("_[\\d].");
var resultedFiles = templateFiles.Where(x => re.IsMatch(x));