【问题标题】:How read files making a filter?如何读取文件制作过滤器?
【发布时间】:2011-08-05 13:56:28
【问题描述】:

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

示例:"1000123107.jpg""1700123107.jpg""1005123101.jpg""1077123107.jpg",在这种情况下,我需要获取以字符 "7.jpg" 结尾的图像:仅"1000123107.jpg",我尝试使用这个:

string[] filePaths = System.IO.Directory.GetFiles(
     filePath + "\\", "*7.jpg", SearchOption.AllDirectories);

但不起作用,因为这也会得到其他在开头或中间有 "7" 的图像。 ("1000123107.jpg""1700123107.jpg""1077123107.jpg")所以这是错误的!

我只需要返回"1000123107.jpg"

请有人告诉我该怎么做?

谢谢。

【问题讨论】:

  • 这听起来可能很愚蠢,但您的排序标准有点奇怪。为什么不让七人组出现在任何其他位置,只要他们也是最后一个角色?
  • 不管名字有其他7个,如果重要的话以7.jpg结尾
  • 那我不明白这个说法:But not work, because that get also other images that have a "7" at begin or in the middle. ("1000123107.jpg" and "1700123107.jpg" and "1077123107.jpg") so thats is wrong!!

标签: c# regex filter directory


【解决方案1】:

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

^[^7]*7\.jpg$

(请注意,我最初的答案没有包括开头和结尾的 ^ 和 $,您需要使用它们来避免虚假匹配)

【讨论】:

  • FreeAsInBeer 的表达更好。你的会匹配 100000000000007.jpg.111 和其他奇怪的东西
  • 不管名字有其他7,如果重要的话以7.jpg结尾
  • @ale 嗯?在您的示例中,您说"1077123107.jpg" 是错误的,但它确实以"7.jpg" 结尾。能不能说的清楚一点?
  • @Dmitrij Golubev 问题说明:“我只需要返回 "1000123107.jpg"”。由于许多其他示例文件的末尾都有 7,我认为区别特征是它们在其他地方有 7。我必须承认我现在有点困惑,我希望能澄清这个问题。
  • @sverre:是的!抱歉,是我的错。有问题:“需要获取以字符 '7.jpg' 结尾的图像”
【解决方案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.

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 90 年代被称为。他们希望他们的 HTML codez 回来。使用更现代的东西怎么样:RegExr
    • neahh,text2re 更加可定制和详细。
    • 经过进一步检查,我相信您是对的。它更像是正则表达式的 Linux,而 RegExr 是正则表达式的 Windows。我将不得不进一步研究这一点;看来这将是正则表达式的一个很好的补充工具。 RegExr 在 95% 的情况下仍然适用于我。
    【解决方案4】:

    我想你正在寻找这个

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

    也许这会有所帮助。

    【讨论】:

    • 不管名字有其他7个,如果有关系就以7.jpg结尾,因为其他文件图片有7个,但我只需要返回以“7.jpg”结尾的图片跨度>
    • 试试这个它会给你你想要的结果。在 .net 3.5 下试用和测试
    • 很好,现在可以了!!所以一个问题,我需要给出一个目录,例如:“c:\Directory”在这个路径里面我有子目录“c:\Directory\Sub1”、“c:\Directory\Sub2”、“c:\Directory\Sub3 " 里面是图片,使用 DirectoryInfo 我无法读取子目录,我该怎么办?
    • @ale OK 试试这个 var fileList = (new DirectoryInfo(filePath)).GetFiles(".", SearchOption.AllDirectories).Where (a => Regex.IsMatch(a.Name, "^[^7]*7.jpg$")).ToList();
    • 请使用星点星号代替点号
    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2017-09-06
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多