gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:43:29 24 4
gpt4 key购买 nike

我希望能够使用正则表达式从字符串列表中获取目标文件名,但查询与文件不完全匹配。文件:

  • 我有几千个文件。我不介意查询速度
  • 可以有任何情况
  • 可以用空格、下划线、破折号或点来分隔单词
  • 如果文件使用“-”将文档名称与源分开,则只需忽略源(“-”之前的任何内容)。
  • 如果确切的术语包含在包含其他文本的文件中,请忽略该文件(如下面示例中的 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"
}

这里第二个和第三个文件应该与查询匹配。

用正则表达式做这件事是不是太难了?或者只是我必须根据查询中使用的单词数量为每个正则表达式创建 case 语句?

编辑来自 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

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

最佳答案

除非我误解了你的问题,否则这应该有效:

-\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());

关于java - 根据不同的单词数量查询不同的正则表达式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29324494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com