【问题标题】:Using regex to get a file extension [duplicate]使用正则表达式获取文件扩展名[重复]
【发布时间】:2014-07-31 05:16:29
【问题描述】:

您好,我需要一个获取路径扩展名的正则表达式,但如果它没有扩展名,它不会显示任何内容或“空白”一词(

这是我所拥有的,它适用于带有扩展名的路径,但如果路径没有扩展名,我会在导出到 CSV 时显示完整的路径名

我有什么: 扩展名 = $matches.fullname -replace '..(.)','$1'

例子

\Server\ShareFile\RootFolder1.2.3\Folder1.2.3\Subfolder2\Excel.csv

在这种情况下,它只会得到 .csv

\Server\ShareFile\RootFolder1.2.3\Folder1.2.3\Subfolder2\RandomFileNoExtension

在这种情况下,它什么也不会显示,或者如果可能的话“空白”

【问题讨论】:

  • 你为什么使用正则表达式而不是[System.IO.Path]::GetExtension()

标签: regex powershell-2.0


【解决方案1】:

使用这个正则表达式:

\.[^.]+$

示例用法

if ($filename -cmatch '\.[^.]+$') {
    $extension = $matches[0]
}

说明

  • \. 匹配一个点
  • [^.]+ 匹配不是点的字符
  • $ 锚断言我们在字符串的末尾

【讨论】:

  • 你先到了! :(反正很好的答案
  • 谢谢你,@ValentinMercier :)
  • 这是为了在哈希表中创建一个新对象,所以使用 IF 语句不能很好地进行,我应该把它放在帖子里抱歉。
  • @user3862909 我的重点是为您提供正确的正则表达式,我相信您会编写所需的代码。 :) 代码示例只是展示使用正则表达式的示例。
  • 感谢绿色复选标记,很高兴它有所帮助。 :)
【解决方案2】:

您可以在不使用正则表达式的情况下解决此问题。使用[System.IO.Path]::GetExtension($fileName)

[System.IO.Path]::GetExtension("README.md")
  returns .md

[System.IO.Path]::GetExtension("README")
  returns nothing

You can find more info on MSDN.

【讨论】:

  • 我使用了这个,我得到了相同的输出,虽然你的看起来更美观,所以我现在将使用它=)
猜你喜欢
  • 2013-03-18
  • 2023-03-08
  • 2015-06-08
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2019-02-19
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多