我需要从以下路径中提取文件名(没有文件扩展名)....
\\my-local-server\path\to\this_file may_contain-any&character.pdf
我尝试了几件事,大部分是基于像http://regexr.com?302m5这样的东西,但是不能完全实现
答案 0 :(得分:30)
^\\(.+\\)*(.+)\.(.+)$
这个正则表达式已经在这两个例子上进行了测试:
\ var \ www \ www.example.com \ index.php
\的index.php
第一个块“(。+ \)*”匹配目录路径。
第二个块“(。+)”匹配没有扩展名的文件名。
第三个块“(。+)$”匹配扩展名。
答案 1 :(得分:10)
这将获得文件名,但也会得到点。您可能希望在代码中截断它的最后一位数字。
[\w-]+\.
<强>更新强>
@Geoman如果文件名中有空格,则使用下面的修改模式
[ \w-]+\. (space added in brackets)
答案 2 :(得分:4)
尝试this:
[^\\]+(?=\.pdf$)
它匹配除了反斜杠之后的所有内容,后跟字符串末尾的.pdf
。
您也可以(也许甚至更好)将您想要的部分带入捕获组:
([^\\]+)\.pdf$
但是你如何引用这个组(括号中的部分)取决于你正在使用的语言或正则表达式。在大多数情况下,它会像$1
或\1
一样,或者库将提供一些方法,以便在regexp匹配后通过其编号获取组。
答案 3 :(得分:4)
答案 4 :(得分:3)
如果有人正在寻找一个Windows绝对路径(和相对路径)javascript正则表达式在javascript中的文件:
var path = "c:\\my-long\\path_directory\\file.html";
((/(\w?\:?\\?[\w\-_\\]*\\+)([\w-_]+)(\.[\w-_]+)/gi).exec(path);
输出是:
[
"c:\my-long\path_directory\file.html",
"c:\my-long\path_directory\",
"file",
".html"
]
答案 5 :(得分:3)
我使用@"[^\\]+$"
这样就给出了包含扩展名的文件名。
答案 6 :(得分:1)
这是对Angelo优秀答案的略微修改,允许在路径,文件名和扩展名中留出空格以及缺少部分:
function parsePath (path) {
var parts = (/(\w?\:?\\?[\w\-_ \\]*\\+)?([\w-_ ]+)?(\.[\w-_ ]+)?/gi).exec(path);
return {
path: parts[0] || "",
folder: parts[1] || "",
name: parts[2] || "",
extension: parts[3] || "",
};
}
答案 7 :(得分:0)
如果你想返回带有扩展名的文件名 Regex 应该如下:
[A-Za-z0-9_\-\.]+\.[A-Za-z0-9]+$
适用于
path/to/your/filename.some
path/to/your/filename.some.other
path\to\your\filename.some
path\to\your\filename.some.other
http://path/to/your/filename.some
http://path/to/your/filename.some.other
And so on
返回带扩展名的完整文件名(例如:filename.some 或 filename.some.other)
如果你想返回没有最后一个扩展名的文件名,正则表达式应该如下:
[A-Za-z0-9_\-\.]+(?=\.[A-Za-z0-9]+$)
返回没有最后一个扩展名的完整文件名(例如:“filename”代表“filename.some”,“filename.some”代表“filename.some.other”)
答案 8 :(得分:0)
回答:
file.tar.gz
,而不仅仅是file.tar
) ^.+(\\|\/)(?<file_name>([^\\\/\n]+)(\.)?[^\n\.]+)$
说明:
^.+(\\|\/)
获取文件路径中最后/
或\
之前的所有内容(?<file_name>
开始命名捕获组([^\\\/\n]+)
除了换行符或新文件外,什么都不会得到(\.)?[^\n\.]+
并不需要,但对于文件名中包含奇数字符的问题非常有用)$
结束命名捕获组和结束行请注意,如果将其放在字符串中,并且需要转义反斜杠(例如C),则将使用以下字符串:
"^.+(\\\\|\/)(?<file_name>([^\\\/\n]+)(\.)?[^\n\.]+)$"
答案 9 :(得分:0)
这里是一种提取文件名而不带扩展名的解决方案。 我从@Hammad Khan的答案开始,然后在搜索字符中添加点。因此,点可以是文件名的一部分:
<a>
然后使用正则表达式向前看[ \w-.]+\.
作为点,这样它将在最后一个点(扩展名之前的点)停止搜索,并且该点将不会出现在结果中:
(?= )
重新排序,没有必要,但是看起来更好:
[ \w-.]+(?=[.])
答案 10 :(得分:0)
这项工作...
.*\/(.+)$
在这里发布以便获得反馈
答案 11 :(得分:0)
直接方法:
要回答您所写的问题,这将提供最精确的匹配项:
^\\\\my-local-server\\path\\to\\(.+)\.pdf$
常规方法:
此正则表达式简短明了,与Windows和* NIX上任何文件夹(带或不带扩展名)中的任何文件名匹配:
.*[\\/]([^.]+)
如果文件名中包含多个点,则上述正则表达式将捕获文件名,直到第一个点为止。如果您知道没有扩展名的文件或没有带点的路径,则可以轻松修改该值以匹配到最后一个点。
如果您知道该文件夹仅包含.pdf文件,或者您只对.pdf文件感兴趣,并且还知道该扩展名永远不会拼写错误,那么我将使用此正则表达式:
.*[\\/](.+)\.pdf$
说明:
.
与行终止符匹配。*
将上一个匹配项从零重复多次。[\\/]
匹配最后一个反斜杠或正斜杠(以前的斜杠由.*
使用)。如果您知道仅使用一种类型的环境,则可以省略反斜杠或正斜杠。
如果要捕获路径,请在括号中用.*
或.*[\\/]
括起来。[^.]
与任何非文字点匹配。+
重复前一次比赛一次或多次,并尽可能多。\.
与文字点匹配。pdf
与字符串pdf匹配。$
声明字符串的结尾。如果您想将文件名中的零,一个或多个点匹配到一个可变路径中,该路径也可能包含点,则它将变得很丑陋。对于这种情况,我没有提供答案,因为我认为这不太可能。
编辑:要还捕获没有路径的文件名,请用(?:.*[\\/])?
(这是一个可选的非捕获组)替换第一部分。
答案 12 :(得分:0)
我正在使用此正则表达式将文件名替换为index
。它与不包含斜杠的连续字符串匹配,并在字符串的末尾跟随.
和一串单词字符。它将检索文件名,包括空格和点,但将忽略完整的文件扩展名。
const regex = /[^\\/]+?(?=\.\w+$)/
console.log('/path/to/file.png'.match(regex))
console.log('/path/to/video.webm'.match(regex))
console.log('/path/to/weird.file.gif'.match(regex))
console.log('/path with/spaces/and file.with.spaces'.match(regex))
答案 13 :(得分:0)
在显示 TEST 的这些链接上单击解释按钮,以查看它们如何工作。
这是特定于pdf
扩展名的。
TEST ^.+\\([^.]+)\.pdf$
这特定于任何扩展名,而不仅仅是pdf
。
TEST ^.+\\([^.]+)\.[^\.]+$
([^.]+)
这是$1
捕获组,用于提取文件名不带扩展名。
\\my-local-server\path\to\this_file may_contain-any&character.pdf
将返回
this_file may_contain-any&character
答案 14 :(得分:0)
在大多数情况下(例如win,unx路径,分隔符,裸文件名,点,文件扩展名),以下一种就足够了:
// grap the dir part (1), the dir sep(2) , the bare file name (3)
path.replaceAll("""^(.*)[\\|\/](.*)([.]{1}.*)""","$3")
答案 15 :(得分:0)
还有一个用于dir和root的文件
^(.*\\)?(.*)(\..*)$
用于dir中的文件
Full match 0-17 `\path\to\file.ext`
Group 1. 0-9 `\path\to\`
Group 2. 9-13 `file`
Group 3. 13-17 `.ext`
for root
中的文件Full match 0-8 `file.ext`
Group 2. 0-4 `file`
Group 3. 4-8 `.ext`
答案 16 :(得分:0)
此正则表达式提取文件扩展名,如果组3不为null,则为扩展名。
.*\\(.*\.(.+)|.*$)
答案 17 :(得分:0)
这是一个适用于windows / unix的替代方法:
"^(([A-Z]:)?[\.]?[\\{1,2}/]?.*[\\{1,2}/])*(.+)\.(.+)"
第一块:路径
第二块:假人
第三块:文件名
第四块:扩展
经过测试:
".\var\www\www.example.com\index.php"
"\var\www\www.example.com\index.php"
"/var/www/www.example.com/index.php"
"./var/www/www.example.com/index.php"
"C:/var/www/www.example.com/index.php"
"D:/var/www/www.example.com/index.php"
"D:\\var\\www\\www.example.com\\index.php"
"\index.php"
"./index.php"
答案 18 :(得分:-1)
TEST ^(.*[\\\/])?(.*?)(\.[^.]*?|)$
示例:
/^(.*[\\\/])?(.*?)(\.[^.]*?|)$/.exec("C:\\folder1\\folder2\\foo.ext1.ext")
结果:
0: "C:\folder1\folder2\foo.ext1.ext"
1: "C:\folder1\folder2\"
2: "foo.ext1"
3: ".ext"
$1
捕获组是文件夹
$2
捕获组是不带扩展名的名称
$3
捕获组是扩展名(仅最后一个)
适用于:
C:\folder1\folder2\foo.ext
C:\folder1\folder2\foo.ext1.ext
C:\folder1\folder2\name-without extension
only name
name.ext
C:\folder1\folder2\foo.ext
/folder1/folder2/foo.ext
C:\folder1\folder2\foo
C:\folder1\folder2\
C:\special&chars\folder2\f [oo].ext1.e-x-t