我的下载文件夹中有一些带有特定字符串模式的pdf文件。我需要获取最新保存的文件。
我的密码是
public static void main(String args[])
{
String directory=System.getProperty("user.home")+"\\Downloads";
File dir=new File(directory);
for(File file:dir.listFiles())
{
if(file.getName().endsWith(".pdf"))
{
String res=file.getName();
match(res);
//System.out.println(file.getName());
}
}
}
private static void match(String res) {
String pattern="[a-zA-Z][0-9][0-9]CR[0-9][0-9][0-9][0-9]-[a-zA-Z][a-zA-Z][a-zA-Z]-[A-Z]-[0-9] \\(\\d+\\).pdf";
Pattern r=Pattern.compile(pattern);
Matcher m=r.matcher(res);
if(m.find())
{
System.out.println("*******Match*********"+m.group());
}
else
{
System.out.println("******No match*******");
}
}
我的输出是这样的
*******Match*********F90CR0010-HBR-C-4 (5).pdf
*******Match*********F90CR0010-HBR-C-4 (6).pdf
*******Match*********F90CR0010-HBR-C-4 (7).pdf
现在我需要找到在大括号()中数字最大的文件
*******Match*********F90CR0010-HBR-C-4 (7).pdf
这里如何匹配正则表达式中的最大整数?
谢谢
2条答案
按热度按时间5jdjgkvh1#
您可以向regex添加一个组,并添加一个计数器来保留数字:
注意,我没有逃脱
()
在\\((\\d+)\\).pdf
,这是因为它们在表达式中的函数,它们定义了一个组。我可以稍后使用其索引检索组,因为我知道
0
是整场比赛,下一组,1
,是我们的号码。这只针对一个文件,但您可以轻松地将其转换到您的上下文中。
关于regex的编辑,可以简化如下:
xlpyo6sf2#
一个简单的策略可能是检索括号中的数字,填充一些排序后的Map,Map为digit->filename,最后得到与最大数字相关联的文件名。我认为仅仅用正则表达式是不可能的。