正则表达式从完整文件路径获取没有扩展名的文件

时间:2013-02-11 15:19:20

标签: regex

如何在不延伸以下文件路径的情况下提取文件名:

D:\Projects\Extract\downtown - second.pdf

以下正则表达式为我提供了扩展名:[^\\]*$ 例如downtown - second.pdf 以下正则表达式为我提供了没有扩展名的文件名:(.+)(?=(\.)) 例如D:\Projects\Extract\downtown - second

我正在努力将两者合并为一个正则表达式,以便给出我想要的结果:闹市区 - 第二

5 个答案:

答案 0 :(得分:3)

我怀疑你的第二个正则表达式不会给你你显示的输出。它将为您提供完整的字符串,直到第一个period (.)

要获得没有扩展名的文件名,可以使用此正则表达式: -

[^\\]*(?=[.][a-zA-Z]+$)

我刚用第一个正则表达式中的(.+)替换了第二个正则表达式中的[^\\]*,并添加了匹配pdf的模式直到结束。

现在,此模式将匹配除0 or more之外的任何字符的backslash(\)次重复,然后是.,然后1 or more重复字母组成扩展。

答案 1 :(得分:3)

我编写了这个,它可以捕捉大部分的可能性:

/[^\\\/]+(?=\.[\w]+$)|[^\\\/]+$/

/路径/到/ 文件

/路径/到/ 文件 .txt的

/path.with/dots.to/的文件 .txt的

/路径/到/的 file.with.dots .txt的

文件 .txt的

C:\路径\到\ 文件 .txt的

依旧......

答案 2 :(得分:0)

我必须在第一个']'之前使用额外的反斜杠才能完成这项工作

[^\\\]*(?=[.][a-zA-Z]+$)

答案 3 :(得分:0)

我使用这种模式

[^\/]+[.+\.].*$  for / path separator
[^\\]+[.+\.].*$  for \ path separator

匹配字符串末尾的文件名而不用担心字符。有一个例外,如果由于某种原因路径有一个带有句点的文件夹,这将会让人心烦意乱。 Linux隐藏目录前面有一个。像.rvm一样不受影响。

希望这会有所帮助。 http://rubular.com/r/LNrI4inMU1

答案 4 :(得分:0)

我使用以下正则表达式从/path/to/file.pdf捕获文件:

[^/]*(?=\.[^.]+($|\?))

希望这有助于你