正则表达式以查找句子中的重复单词

时间:2018-08-17 11:56:54

标签: java regex

我试图写一个正则表达式来查找句子中的重复单词。 好吧,我尝试使用此表达式:

\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变量找出给定单词的出现次数。

2 个答案:

答案 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)它检测到第一个单词,该单词在字符串中出现多次。

Demo