我希望能够从带有Regex的字符串列表中获取目标文件名,但查询不能完全匹配文件。 文件:
-
”从源代码中分解文档名称,只需忽略源代码(“-
”之前的任何内容)。由于我将在我的java应用程序中执行其中的许多操作,因此我想创建一个可以处理不同大小的输入和文件名字符串的Java函数。
示例:
Query = "microfluidic systems"
FileList[] = {
"The.Fabrication.of.microfluidic.systems.in.PDMS.pdf",
"IEEE - microfluidic systems.pdf",
"microfluidic systems.pdf",
"Self-Assembled Electrical Contact to Nanoparticles.pdf",
"IEEE - Gallium Alloy as Lubricant_for_High_Current - Density Brushes.pdf",
"Liquid Metal Marbles.pdf"
}
此处第二个和第三个文件应与查询匹配。
这对正则表达式来说太难了吗?或者只是我必须根据我的查询中使用的单词数量为每个正则表达式创建案例陈述?
修改 来自QPaysTaxes的回答。
String yourText = "microfluidic systems";
String fileName = "sometext microfluidic systems.pdf";
String search = yourText.replace(" ", "[\\s_.-]+").toLowerCase();
Pattern pattern = Pattern.compile("\\s*" + search + "\\..+$");
Matcher matcher = pattern.matcher(fileName.toLowerCase());
if (matcher.find())
{
System.out.println(matcher.group());
}
打印结果:
microfluidic systems.pdf
我想我可能会遗漏一些东西?
答案 0 :(得分:1)
除非我误解你的问题,否则这应该有效:
-\s*(your text here)\..+$
请注意,Java要求您转义反斜杠,因此您的代码将具有以下内容:
String regex = "-\\s*" + yourText + "\\..+$"
如果您希望接受任何类型的空格来区分短语中的字词,可以将yourText
替换为yourText.replace(" ", "[\\s_.-]+")
并在名称定义中使用空格。
然后,要查看正则表达式是否与文件名匹配,请使用String#matches()
:
filename.matches(regex);
如果您希望它不区分大小写,请将两者都转换为小写(即String#toLowerCase()
):
fileName.toLowerCase().matches(regex.toLowerCase());