【问题标题】:Regex to exclude certain file extensions正则表达式排除某些文件扩展名
【发布时间】:2017-04-19 15:04:17
【问题描述】:

有人问过类似的问题,但他们错过了我需要做的一件事,我无法弄清楚。

我需要找到所有没有 tif 或 tiff 扩展名的文件,但我确实需要找到所有其他文件,包括那些没有扩展名的文件。我得到了使用下面正则表达式的第一部分,但这与没有扩展名的文件不匹配。

^(.+)\.(?!tif$|tiff$).+$

效果很好,但我需要以下工作。

filename.ext MATCH
filename.abc MATCH
filename.tif FAIL
filename     MATCH

谢谢:)

【问题讨论】:

  • 适用于哪种语言?
  • 目录中有文件还是文本文件中有字符串?

标签: regex


【解决方案1】:

如果您不使用 JS/ECMAscript 正则表达式,您可以使用:

^.*(?<!\.tif)(?<!\.tiff)$

【讨论】:

  • 确实我做得过火了。 Lookbehinds 对我来说仍然是难以置信的反直觉,当他们什么都不做时。也许您应该将\. 添加到lookbehinds,因为现在它们不会像他们应该的那样匹配boring_filename_ending_with_tif
  • @CyrilLemaire 你什么意思?这正是他们所做的。请记住,它们查看正则表达式引擎正在评估的当前位置。真正开始变得疯狂的地方是当您将lookbehinds 嵌套在lookaheads 中时(等)。
【解决方案2】:

与其编写否定的正则表达式,不如考虑使用更简单的正则表达式,但在不匹配时采取行动。这通常是一种优越的方法。

它不能在所有情况下都使用(例如,如果您使用的命令行工具需要您指定 匹配的内容),但我会尽可能这样做。

【讨论】:

    【解决方案3】:

    这对我有用:

    ^(?:(.+\.)((?!tif$|tiff$)[^.]*)|[^.]+)$
    

    该正则表达式分为两个不同的部分:

    第 1 部分: (.+)\.((?!tif$|tiff$)[^.]*)

    • (.+) (第一个捕获组) 匹配文件名(可能包含点)
    • \. 匹配字符串的最后一个点(在扩展名之前)。
    • ((?!tif$|tiff$)[^.]*) (第二个捕获组) 然后检查点是否 not 后跟 exactly "tif" 或“tiff”,如果是,则匹配扩展名。

    第 2 部分: [^.]+ 如果第 1 部分不匹配,请检查您是否只有一个不包含点的文件名。

    【讨论】:

    • 祝你好运filename.bak.tif
    • 哎呀,你说得对,我忘了那些,当我更正时我回来了,谢谢。
    【解决方案4】:

    如果文本文件中有一些字符串(有换行符)

    perl -lne '/(?:tiff?)/ || print' file  
    

    如果目录中有一些文件:

    ls | perl -lne '/(?:tiff?)/ || print'  
    

    截图:

    【讨论】:

      【解决方案5】:

      这是我想出的:

      ^[^\.\s]+(\.|\s)(?!tiff?)
      

      解释:

      行到点或空格的开头,将匹配组放在此周围,即:

      ^(?<result>[^\.\s]+)
      

      然后它将查找一个点或一个空格,并在 tiff 上进行负前瞻(tiff? 将匹配 tif 和 tiff)。

      这假设文件名后面总是有一个点或空格。如果这是您需要的,您可以将其更改为行尾:

      ^[^\.\s]+(\.(?!tiff?)|\n)   linux
      ^[^\.\s]+(\.(?!tiff?)|\r\n) windows
      

      【讨论】:

      • [^\.|\s] 实际上会匹配任何不是.| 或空格的字符。我不确定您是否要匹配除点和空格之外的任何内容 ([^.\s]) 还是我根本不理解您。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多