gpt4 book ai didi

java - 正则表达式未提取确切的模式

转载 作者:行者123 更新时间:2023-12-01 19:08:07 25 4
gpt4 key购买 nike

我正在使用 Java 读取超过 100000 个字符的字符串。我有一个关键字列表,我会搜索字符串,如果该字符串存在,我会调用一个进行一些内部处理的函数。

例如,我拥有的关键字是“face” - 我希望获得与“faces”而不是“facebook”匹配的所有模式。我可以接受字符串中脸部后面的空格字符,因此如果在字符串中我有一个像“face”或“faces”或“face”或“faces”这样的匹配项,我也可以接受。但是我不能接受“duckface”或“duckface”等。

我已经写了正则表达式

Pattern p = Pattern.compile("\\s+"+keyword+"s\\s+|\\s+");

其中关键字是我的关键字列表,但我没有得到所需的结果。您能阅读我的描述并请建议可能出现的问题以及如何解决它吗?

此外,如果共享一个指向非常好的 Java 页面正则表达式的指针,我也会很感激。

感谢贡献者..

编辑

我知道它不起作用的原因是我使用了以下代码:

Pattern p = Pattern.compile("\\s+"+keyword+"s\\s+|\\s+");
Matcher m = p.matcher(myInputDataSting);
if(m.find())
{
System.out.println("Its a Match: "+m.group());
}

这将返回一个空白字符串...

最佳答案

如果关键字“face”,那么您当前的正则表达式是

\s+faces\s+|\s+

匹配一个或多个空白字符,后跟faces,后跟一个或多个空白字符,一个或多个空白人物。 (管道 | 的优先级非常低。)

你真正想要的是

\bfaces?\b

匹配单词边界,后跟 face,可选地后跟 s,后跟单词边界。

所以,你可以这样写:

Pattern p = Pattern.compile("\\b"+keyword+"s?\\b");

(显然,这仅适用于像 face 这样的单词,只需添加 s 即可形成复数形式)。

您可以在 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 找到 Java 正则表达式支持的完整列表。 ,但这并不是一个教程。为此,我建议仅谷歌搜索“正则表达式教程”,然后找到适合您的。 (它不必是特定于 Java 的:您会发现的大多数教程都是针对与 Java 非常相似的正则表达式风格。)

关于java - 正则表达式未提取确切的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342985/

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