【问题标题】:How to search wildcard [duplicate]如何搜索通配符[重复]
【发布时间】:2021-07-26 04:30:15
【问题描述】:

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

这是我写的:

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" 他们不会包括在内。

【问题讨论】:

  • 正则表达式Path.GetFielName()(例如@"\d{2}-\d-\d{9}"+".ext")?
  • 我删除了我的答案。我完全看错了你的最后一句话
  • 当内置通配符支持不足时,就不得不使用其他一些模式匹配的手段。正则表达式通常是下一个选择。查看重复项。

标签: c# wildcard


【解决方案1】:

同意吉米;对于复杂的模式匹配,最好获取所有 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,然后是字符串结尾”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2019-09-25
    • 2016-03-16
    • 2012-08-29
    • 2015-03-15
    • 2018-04-20
    相关资源
    最近更新 更多