2

如何从以下文件路径中提取不带扩展名的文件名:

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

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

我正在努力将两者组合成一个正则表达式,以提供我想要的结果: Downtown - second

4

5 回答 5

6

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

要仅获取不带扩展名的文件名,您可以使用此正则表达式:-

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

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

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

于 2013-02-11T15:23:12.040 回答
5

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

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

/路径/到/文件

/path/to/文件.txt

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

/path/to/ file.with.dots .txt

文件.txt

C:\path\to\文件.txt

等等...

于 2016-11-16T15:02:00.270 回答
0

我用这个模式

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

hich 匹配字符串末尾的文件名,而不用担心字符。有一个例外,如果路径出于某种原因有一个带有句点的文件夹,这会令人不安。以 . 开头的 Linux 隐藏目录。像 .rvm 不受影响。

希望这可以帮助。 http://rubular.com/r/LNrI4inMU1

于 2013-11-25T22:40:23.633 回答
0

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

[^\\\]*(?=[.][a-zA-Z]+$)
于 2013-02-28T16:07:15.107 回答
0

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

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

希望这可以帮助你

于 2016-08-03T21:19:22.233 回答