我想显示所有位置都有“33”的PDF文件名。
PDFFiles文件夹上的pdf列表
1111.pdf
3311.pdf
2222.pdf
2331.pdf
1234.pdf
1233.pdf
我需要得到这样的结果,这是sql上的喜欢通配符%33%
3311.pdf
2331.pdf
1233.pdf
我试过这个
Me.ListBox1.Items.AddRange(Directory.GetFiles("C:\PDFFiles", "*33*" & ".PDF", SearchOption.AllDirectories))
但它仍会显示所有pdf文件。
1111.pdf
3311.pdf
2222.pdf
2331.pdf
1234.pdf
1233.pdf
和这个
Me.ListBox1.Items.AddRange(Directory.GetFiles("C:\PDFFiles", "*33" & ".PDF", SearchOption.AllDirectories))
但它只能
1233.pdf //this get all filename that ends with 33
表示感谢
答案 0 :(得分:2)
当使用多个*
时,我也注意到了这种行为。
我通过获取所有文件名然后使用LINQ过滤正确的名称来解决它:
Dim allFileNames as String() = _
Directory.GetFiles("C:\PDFFiles", "*.PDF", SearchOption.AllDirectories)
Dim filtered As IEnumerable(Of String) = _
.Where(Function(fileName) Path.GetFileNameWithoutExtension(fileName).Contains("33"))
答案 1 :(得分:2)
如果习惯使用正则表达式,通配符的模式匹配算法会很奇怪。它背后有很多历史,可以追溯到Windows 3,MS-DOS,CP / M(8位机器的操作系统)和RSX(16位DEC机器上的操作系统)。他们之间的借贷很多,包括通配符行为。一些偶然的共性btw,大卫卡特勒是第一个和最后一个背后的主要建筑师。
Anyhoo,*33*
无效。您需要应用自己的过滤器。搜索*.*
或*.pdf
并使用Path.GetFileNameWithoutExtension()和String.Contains()来查找匹配项。
答案 2 :(得分:0)
*
结束时你遗失了"*33"
,在"*33*"
的末尾又放了一颗星。
您当前的表达:“* 33”& “.PDF”表示所有文件名以33.PDF
结尾,这就是您获得1233.pdf
而非2331.pdf
类似于
"*1*.txt"
的搜索模式可能会返回意外的文件名。 例如,使用“ 1 .txt”的搜索模式返回 “longfilename.txt”因为等效的8.3文件名格式是 “LONGFI〜1.TXT”。
答案 3 :(得分:0)
我们发现了
如果字符串的长度大于或等于4,则过滤*___*
。
所以如果我想获得所有具有测试名称值的记录:
test1234.pdf
abcdefg.pdf
123test45.pdf
12345678.pdf
我的过滤器应为:"*test" & ".PDF"
它会提供所需的结果
test1234.pdf
123test45.pdf
FYI