gpt4 book ai didi

java - 单词末尾加号的正则表达式

转载 作者:行者123 更新时间:2023-11-30 06:05:24 28 4
gpt4 key购买 nike

我收到了 2 条短信:

第一个:我最喜欢的编程语言是 c++。

第二个:我最喜欢的编程语言是 c。

并且想要在这些文本中分别查找 cc++

为了查找c,我可以写:\bc\b 然后:第一个文本不好!第二个很好。我也尝试过: \bc^\+\b 但不起作用。为了查找 c++ 我尝试了例如: \bc\+\+\b 但第一个和第二个不起作用。请帮忙。

编辑:

如果文本是 Iprogram in c++ a lot! 会怎样?

编辑:

这是我需要完成的单元测试:

package adhoc;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

import junit.framework.TestCase;

public class FinderProgrammingTechnologyInTextTest extends TestCase{

@Test
public void testFind() {
// Given:
Set<String> setOfProgrammingLanguagesToSeek = new HashSet<>();
setOfProgrammingLanguagesToSeek.add("java");
setOfProgrammingLanguagesToSeek.add("perl");
setOfProgrammingLanguagesToSeek.add("c");
setOfProgrammingLanguagesToSeek.add("c++");

// When:
FinderProgrammingTechnologyInText finder = new FinderProgrammingTechnologyInText(
setOfProgrammingLanguagesToSeek);
Set<String> result = finder.find("java , perl! c++ and other staff");

// Then:
assertTrue(result.contains("java"));
assertTrue(result.contains("perl"));
assertFalse(result.contains("c"));
assertTrue(result.contains("c++"));
}

}

仅更改 compile() 方法的参数:

package adhoc;

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class FinderProgrammingTechnologyInText {

Set<String> setOfTechnologiesToSearch;

public FinderProgrammingTechnologyInText(Set<String> x) {
this.setOfTechnologiesToSearch = x;
}

public Set<String> find(String text) {
Set<String> result = new HashSet<>();
return setOfTechnologiesToSearch.stream()
.filter(x -> Pattern
.compile(x) // change only this line
.matcher(text).find()
)
.collect(Collectors.toSet());
}
}

最佳答案

替换.compile(x)符合

.compile("(?<![\\w\\p{S}])" + Pattern.quote(x) + "(?![\\w\\p{S}])")

在这里,(?<![\w\p{S}])是一个负向后查找,将确保当前位置左侧没有单词或符号字符,并且 (?![\w\p{S}])负向前视将确保当前位置右侧没有紧邻的单词或符号字符(也就是说,单词和符号字符现在是您允许的“单词”字符)。

查看sample regex demo for a c++ keyword at regex101.com .

由于搜索词作为文字字符序列传递到 Pattern ,他们must be escaped ,这就是 Pattern.quote(x)是在代码中执行的。

关于java - 单词末尾加号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612522/

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