如何读取文件制作过滤器?

时间:2011-04-14 13:57:30

标签: c# regex filter directory

我需要读取一些目录,问题是我需要按文件名进行过滤。

示例:"1000123107.jpg""1700123107.jpg""1005123101.jpg""1077123107.jpg",在这种情况下,我需要获取以字符"7.jpg"结尾的图片:only { {1}},我试试这个:

"1000123107.jpg"

但不起作用,因为这也会得到其他在开始或中间有string[] filePaths = System.IO.Directory.GetFiles( filePath + "\\", "*7.jpg", SearchOption.AllDirectories); 的图像。 ("7""1000123107.jpg"以及"1700123107.jpg")这是错误的!

我只需要返回"1077123107.jpg"

请有人告诉我该怎么办?

感谢。

4 个答案:

答案 0 :(得分:2)

到目前为止,您有一个以“7.jpg”结尾的文件列表。要过滤掉文件名中包含7个其他位置的文件,请使用正则表达式:

^[^7]*7\.jpg$

(注意我的初步答案不包括开头和结尾的^和$,你需要使用它来避免虚假匹配)

答案 1 :(得分:2)

您当前的正则表达式只要求以“7.jpg”结尾。您似乎只想过滤只有一个“7”的文件,它位于文件名的最后。您可以像这样使用正则表达式:

^[^7]*7.jpg$

以下是故障的解决方法:

^        - Start of the line.
[^7]*    - Allow any number of characters that are not sevens.
7.jpg    - Ensure that there is a 7 at the end of the filename.
$        - End of the line.

答案 2 :(得分:0)

使用text2re,一个免费的基于网络的“正则表达式”生成器。在那里发布你的字符串值,它将返回正则表达式的组合。尝试自己的,这是最好的方法。这将帮助您测试各种正则表达式。

答案 3 :(得分:0)

我认为你正在寻找这个

var fileList = (new DirectoryInfo(filePath)).GetFiles().Where(a => Regex.IsMatch(a.Name, "^[^7]*7.jpg$")).ToList();

也许这可能有所帮助。