根据不同数量的单词查询不同的正则表达式字符串

时间:2015-03-29 01:02:22

标签: java regex

我希望能够从带有Regex的字符串列表中获取目标文件名,但查询不能完全匹配文件。 文件:

  • 我有几千个文件。我不介意查询速度
  • 可以有任何案例
  • 可以有空格,下划线,短划线或点来分解单词
  • 如果文件使用“-”从源代码中分解文档名称,只需忽略源代码(“-”之前的任何内容)。
  • 如果确切的术语包含在其中包含其他文本的文件中,请忽略此文件(如下例中的FileList [0])

由于我将在我的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

我想我可能会遗漏一些东西?

1 个答案:

答案 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());