【问题标题】:Regex to check if file does not have an extension正则表达式检查文件是否没有扩展名
【发布时间】:2019-03-07 09:32:57
【问题描述】:

我想根据文件扩展名处理文件。我需要处理 2 个文件:一个是 .nc 扩展名,另一个文件没有任何扩展名

文件名可以是任何东西,没关系。

对于 .nc 扩展我有 .*.nc 正则表达式,但我需要组合正则表达式。我用谷歌搜索但找不到任何东西。任何人都可以帮助我使用符合这两个条件的正则表达式吗?

【问题讨论】:

  • 你能澄清你想要什么吗?你想要一个匹配这两个文件的正则表达式吗?然后你不关心扩展,因为它不一样。你如何排除其他文件?或者您想查找具有.nc 作为扩展名的文件并获取它+具有相同名称但没有扩展名的文件?
  • 我必须处理扩展名为 .nc 的文件或没有扩展名的文件。它可以是相同的名称或不同的名称。在上面的屏幕截图中,两个文件具有相同的名称,但 1 有扩展名,而其他没有。两者都可以。
  • 为了清楚起见,您不必关心文件的名称。您想要具有.nc 扩展名的文件或没有扩展名的文件。并且所有其他文件(= 扩展名和扩展名不同于.nc 的文件)必须被忽略。我对么 ?您能否编辑您的问题以使其更清楚?
  • 是的,正确的。我不在乎文件名。

标签: java regex


【解决方案1】:

你可以使用这个模式(?(?=.*\.)^.*\.nc$|^.*$)

这是有条件的,带有肯定的前瞻,它检查字符串是否包含点(使用模式(?=.*\.))。如果是,则匹配带有.nc 扩展名的字符串(带有^.*\.nc$),如果不是,则匹配整个字符串(带有^.*$)。

Demo

【讨论】:

  • 这个(^\w+\.nc$)|(^\w+$) 怎么样? (我不是正则表达式专家,这就是我问的原因)
  • 好吧,如果您只想匹配字母、数字或下划线,它可能会起作用。它匹配任何字母、数字或下划线。等价于 [a-zA-Z0-9_]。
  • 嗨,vincrichaud,你的表达方式也有效。谢谢。
  • 嗨,Michal,感谢您的解决方案。这个表达有效。
【解决方案2】:

您可以使用正则表达式(\w+.nc\b|\b\w+\b[^.])。它会捕获像 abc.nc 和 abc 但不 abc.rc 这样的任何东西,所以它只会捕获所需的扩展名或没有扩展名。

【讨论】:

  • 你试过了吗?它匹配 abc-.xyz 但不匹配 a-b.nc
  • 你会有这样的文件名吗? @托托
  • 那么我想 '([^\s]+.nc|^.[^.]+$)' 可能会满足您的要求。
【解决方案3】:

我认为这也适合您的情况。 ^([^\s]+.nc|[^\s.]+)$ .^and$ 分别断言行首和行尾的位置,并且在它之间匹配任何不带扩展名或带 .nc 扩展名的单词字符。

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2011-04-09
    相关资源
    最近更新 更多