【发布时间】:2020-03-11 08:32:10
【问题描述】:
寻找一个正则表达式来提取文件名部分,不包括此代码中路径的扩展名
String filename = fullpath.replaceFirst(regex, "$1")
例如首先,这是最简单的案例和我所做的:
- /path/filename.ext -> 文件名 (
fullpath.replaceFirst(".*/(.*)\\..*", "$1"))
这里有一些我需要帮助的高级案例:
- /filename.ext -> 文件名(可以/开头)
- 文件名。 -> 文件名(可以以 . 结尾)
- /filename -> 文件名(可以没有.)
- filename.ext -> 文件名(不能有/)
- 文件名 -> 文件名(不能有.和/)
- .filename -> .filename(可以以.开头)
- /path/.filename -> .filename(可以在/之后以.开头)
- filename.part1.ext -> filename.part1(可以有中间.)
- /path_a/path.b/ ->(空字符串)(可以没有文件名)
- /path_a/path.b/filename -> 文件名(路径中/之前可以有.)
编辑:
这里没有实际文件,fullpath 不会指向任何文件。它来自一个 URL 请求。
【问题讨论】:
-
new File(fullpath).getName() -
@XtremeBaumer 不幸在上述许多情况下都失败了。
-
因为你说文件夹不是文件。过滤掉文件夹后,它可以 100% 工作。但是文件夹是文件并且也有名称。扩展名通常也是名称的一部分
-
@XtremeBaumer 我不太确定你在说什么?我试过你的代码,它没有给出正确的答案。而且我没有在任何地方提到文件夹,你为什么说文件夹?
-
/path_a/path.b/是文件夹而不是文件的有效路径。然而它仍然有一个名字