如何在不延伸以下文件路径的情况下提取文件名:
D:\Projects\Extract\downtown - second.pdf
以下正则表达式为我提供了扩展名:[^\\]*$
例如downtown - second.pdf
以下正则表达式为我提供了没有扩展名的文件名:(.+)(?=(\.))
例如D:\Projects\Extract\downtown - second
我正在努力将两者合并为一个正则表达式,以便给出我想要的结果:闹市区 - 第二
答案 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捕获文件:
[^/]*(?=\.[^.]+($|\?))
希望这有助于你