用于从路径中提取文件名的正则表达式

Web*_*net 24 regex

我需要从以下路径中提取文件名(没有文件扩展名)....

\\my-local-server\path\to\this_file may_contain-any&character.pdf

我尝试了几件事,大部分是基于像http://regexr.com?302m5这样的东西,但是不能完全达到目的

小智 32

^\\(.+\\)*(.+)\.(.+)$
Run Code Online (Sandbox Code Playgroud)

这个正则表达式已经在这两个例子上进行了测试:

\ var\www\www.example.com\index.php
\ index.php

第一个块"(.+ \)*"匹配目录路径.
第二个块"(.+)"匹配没有扩展名的文件名.
第三个块"(.+)$"匹配扩展名.


Ham*_*han 13

这将获得文件名,但也将得到点.您可能希望在代码中截断它的最后一位数字.

[\w-]+\.
Run Code Online (Sandbox Code Playgroud)

更新

@Geoman如果文件名中有空格,则使用下面的修改模式

[ \w-]+\.      (space added in brackets)
Run Code Online (Sandbox Code Playgroud)

演示

  • 如果路径中包含带点的文件夹名称,则失败。 (3认同)
  • 这适用于我的相关问题(带扩展名的文件名,但没有目录 - 只需在 `\.` 之后添加 `[\w-]*$` - 这也消除了文件夹名称中带有点的问题)。 (2认同)

cam*_*son 9

这只是@hmd的一个细微变化,因此您不必截断 .

[ \w-]+?(?=\.)
Run Code Online (Sandbox Code Playgroud)

演示版

真的,感谢@hmd。我对此只稍作改进。


KL-*_*L-7 8

试试这个

[^\\]+(?=\.pdf$)
Run Code Online (Sandbox Code Playgroud)

它匹配除反斜杠后跟.pdf字符串末尾的所有内容。

您也可以(也许更好)将您想要的部分加入捕获组,如下所示:

([^\\]+)\.pdf$
Run Code Online (Sandbox Code Playgroud)

但是您如何引用这个组(括号中的部分)取决于您使用的语言或正则表达式风格。在大多数情况下,它会像$1、 或一样,或者\1库将提供一些方法来在正则表达式匹配后通过其编号获取捕获组。


use*_*332 5

我使用@"[^\\]+$" That 给出了包含扩展名的文件名。

  • 它是否正确?不应该是`[^\/]+$`吗? (2认同)
  • @fabianoLothor - 如果网址有正斜杠,那么这就是你的方式。如果是反斜杠那就是我的方式。问题是反斜杠。 (2认同)