首页 > 解决方案 > 如何搜索通配符

问题描述

我正在尝试获取具有特定模式的文件夹文件名。

我写了这个:

string[] allfiles = Directory.GetFiles(x, "??-?-??????????.pdf", SearchOption.AllDirectories);

但这也有效:

string[] allfiles = Directory.GetFiles(x, "??-?-???.pdf", SearchOption.AllDirectories);

结果是一样的:

C:\Users\source\repos\LettersUploader\myFiles\10-9-110000000.pdf
C:\Users\source\repos\LettersUploader\myFiles\11-8-120000000.pdf
C:\Users\source\repos\LettersUploader\myFiles\12-7-130000000.pdf

我希望这只是数字,并且在这种模式下是“11-1-111111111.pdf”,所以如果有文件看起来像这样“11-1-1111.pdf”或“xx-g-atpfgtnjk.pdf”他们将不包括在内。

标签: c#wildcard

解决方案


同意吉米;对于复杂的模式匹配,最好获取所有 pdf,然后使用正则表达式在 c# 中过滤你不想要的

var r = new Regex(@"[/\\]\d{2}-\d-\d{9}\.pdf$", RegexOptions.Compiled);

foreach(var f in Directory.GetFiles(x, "*.pdf").Where(r.IsMatch))
  ...

该正则表达式的意思是“正斜杠或反斜杠,然后是 2 位数字,然后是连字符,然后是数字,然后是连字符,然后是 9 位数字,然后是点 pdf,然后是字符串结尾”


推荐阅读