我试图写一个正则表达式来查找句子中的重复单词。 好吧,我尝试使用此表达式:
\b(\w+)\b.*?\1
从句子"Hello how in the Hello world are you ? are you okay? Hello"
中选择3x'hello',2x'are'和2x'you',我知道这显然是错误的,因为它考虑了整个单词组而不是一个特定单词!
那么您能纠正我的表情还是提出自己的解决方案?
我正在使用Matcher
类尝试在matcher.find()
的while循环中使用count变量找出给定单词的出现次数。
答案 0 :(得分:2)
Regex并不真正适合这样的工作。正则表达式不会计数。您可以在regex的帮助下完成此操作,但是,即使不是没有可能,仅使用regex也很难做到这一点。
这是我的尝试:
String sentence = "Hello how in the Hello world are you ? are you okay? Hello";
String[] words = Pattern.compile("\\W+").split(sentence); // split the sentence into words
Map<String, Integer> list = Arrays.stream(words)
.collect(Collectors.groupingBy(x -> x))
.entrySet().stream()
.filter(x -> x.getValue().size() != 1) // remove the words that are not repeated
.collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue().size()));
答案 1 :(得分:0)
尝试以下模式:(?<=\b| )([^ ]+)(?= |$).+(\1)
它检测到第一个单词,该单词在字符串中出现多次。