我需要读取一些目录,问题是我需要按文件名进行过滤。
示例:"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"
。
请有人告诉我该怎么办?
感谢。
答案 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();
也许这可能有所帮助。