【问题标题】:Java Regex FileName not repeatedJava Regex FileName 不重复
【发布时间】:2019-07-28 07:32:35
【问题描述】:

我正在尝试为不重复的文件名设置验证,如果某些文件重复,则应以这种方式编写:

  • 文件名.PDF
  • FILENAME_1.PDF
  • FILENAME_2.PDF

所以我可以做第一个,但其他的怎么能拿?

我之前会得到一个所有文件名文档的列表,所以现在我尝试为每个文档制作一个类似的,但我不知道如何制作正则表达式来获取它。

FILENAME_1.PDF -> REGEX() -> 获取返回 -> 1


更新

如果我的 bbdd 中有这些文件:[filename.pdf, filename_1.pdf, filename_2.pdf]。

当有人上传一些基于该文件的新文件时,我需要,如果存在文件名 2,我的新名称将是 filename_3.pdf。

FILENAME_VERSION.EXTENSION

基于此,我需要获取最后一个文件名的版本。谢谢!

注意:会有更多不同的文件名,例如 FILANEM_FILENAM_VERSION.pdf


谢谢!

【问题讨论】:

  • 为什么要用正则表达式?只需使用带有文件名出现的哈希图 - 。不要把简单的任务复杂化。
  • 您可以为您的示例添加预期的输出吗? “所以我可以做第一个,但其余的怎么能拿走?”这句话不清楚。您想获取第一个的所有副本,还是只获取第一个并忽略副本?
  • 我不能使用 hashmap,只能使用文件名。 @Amongalen
  • 我想获取最新版本的副本,用于创建新副本,版本增加。我会更新我的回答。 @vincrichaud
  • _(\d+)\.[^.]+$ 将提取数字(它捕获文件名中最后一个点之前并跟随下划线的数字,您可以尝试here)。不过,我真的不确定这如何帮助解决您的问题。

标签: java regex


【解决方案1】:

我会使用以下正则表达式:

_(\d+)\.[^.]+$

或者在 Java 中:

_(\\d+)\\.[^.]+$

正则表达式捕获下划线和文件名最后一个点之间的数字。

你要找的号码被第一个抓包组抓到了,需要用Matcher.group提取。

你可以试试here

在 filename.pdf 中找不到版本
在 filename1.pdf 中找不到版本
文件名_1.pdf - 找到的版本:1
文件名 1_2.pdf - 找到的版本:2
在 filename_1.test.pdf 中找不到版本
文件名_1.test_2.pdf - 找到的版本:2
在文件名_1 中找不到版本

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 2023-03-19
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多