【问题标题】:Java regular expression for FileNameFilter implementationFileNameFilter 实现的 Java 正则表达式
【发布时间】:2012-08-23 09:19:00
【问题描述】:

我需要扫描文件夹并过滤与特定正则表达式模式匹配的文件。

FileNameFilter 的 accept 方法中的示例代码


Scanner fileNameScanner = new Scanner(fileName);

Pattern mainPattern = Pattern.compile(this.pattern);

fileNameScanner.findInLine(mainPattern);

MatchResult result = fileNameScanner.match();

现在,我需要一个正则表达式来过滤匹配名称为 impl-2.0.xml 的文件,同时它不应该匹配 impl-Test-2.0.xml。

我尝试了一些设置,但似乎不起作用。它也选择 impl-Test-2.0.xml。

【问题讨论】:

  • 请更具体地说明您要匹配的内容。您是否在寻找(伪代码)<string>-<major>.<minor>.xml?如果您能用文字描述您要查找的内容,我们可以帮助您编写正则表达式。
  • “我有一个要求” 很好,很好.. 你有问题吗?如果是这样,请不要害羞,继续问。 :)
  • 给出正则表达式应该和不应该匹配的限制示例。
  • 给定一组字符串,我需要一个正则表达式来过滤类型为 impl-2.0 而不是 impl-Test-4.0 的字符串(在我的情况下为文件名)。例如,我有以下字符串,我只需要提取 impl-2.0 和 api-3.0 示例字符串:impl-2.0、impl-Test-2.0、api-2.0、api-Test-2.0、api-temp-2.0。我应该使用什么正则表达式?
  • 我对-..xml 很满意

标签: java regex


【解决方案1】:

Regexr 上查看它的实际效果:

^\w+-\d\.\d\.xml

【讨论】:

  • 应该是^\w+-\d\.\d\.xml。否则,连字符前可能没有任何内容。
  • 我特此命名这个游戏,评论更正Pong!轮到你了... :-)
  • 大声笑 :) 你的答案现在更完整了。如果您考虑添加 Regexr 链接,我会向 OP 施加压力以接受它:)
【解决方案2】:

我对@9​​87654321@很满意

任何类型的字符”是正则表达式中的危险语句!如果我们通过假设您对任何字母或数字感到满意来限制这一点会更好。基于该假设,您希望:

Pattern p = Pattern.compile("\\w+-\\d\\.\\d\\.xml");

这将匹配 a-z、A-Z、0-9 范围内的字符,后跟连字符、一位数字、句点、一位数字和.xml

【讨论】:

  • 还匹配 OP 不想要的 impl-Test-2.0.xmlapi-Test-2.0.xmlapi-temp-2.0.xml。实际上,OP 不想要<one or more characters of any type>,我认为他们想要字母字符。需要澄清。
【解决方案3】:

评论后编辑

对于大小数量有限的绝对路径

Pattern.compile(".*impl-[0-9]{1,2}\\.[0-9]{1,2}.xml");

对于名称文件:

Pattern.compile("impl-[0-9]+\\.[0-9]+.xml");

编辑 2

final Pattern patt = Pattern.compile("^\\p{Alnum}+\\-[0-9]+\\.[0-9]+.xml$");

控制台

impl-3.0.xml
api-3.0.xml
x10-2.0.xml

如果你 grep 绝对路径,你可以用 Java 路径分隔符替换 ^

【讨论】:

  • 这与 cmets 中提供的其他一些示例不匹配。此外,由于其他原因,它似乎是一个糟糕的模式选择。当您可以使用+ 时,您使用{1,}。出于某种原因,您决定第二个数字可以是两位数,但第一个不能?你在impl 之前接受anything,这可能不合适。
  • @DuncanJones is my EDIT 似乎更适合你?
  • 我已经尝试过这些,但它们似乎都不起作用示例字符串 impl-3.0.xml, api-3.0.xml, x10-2.0.xml, impl-Test- 3.0.xml, api-Test-3.0.xml, 4.0-impl.xml Regular exp Pattern.compile(".+-\\d\\.\\d\\.xml") Pattern.compile("\\w+-\\d\\.\\d\\.xml") Pattern.compile(".*impl-[0-9]{1,2}\\.[0-9]{1,2}.xml") Pattern.compile("impl-[0-9]+\\.[0-9]+.xml") Pattern.compile("\\w-[0-9]+\\.[0-9]+.xml") 它应该只选择 3 个字符串 "impl-3.0.xml", "api-3.0.xml" ,“x10-2.0.xml”。可以exp。 impl-[0-9]+\\.[0-9]+.xml 应该是泛化的。
  • @ManikandanKannan 和你一起样品我找到了解决方案
猜你喜欢
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多