用于在java中搜索重复单词的正则表达式

时间:2015-04-29 11:19:49

标签: java regex

我想从给定的字符串中找到重复的单词。 我想要一个正则表达式来查找单词的每个出现位置。 例如"I want to eat apple. apple is a fruit"

正则表达式应找出单词"apple"

3 个答案:

答案 0 :(得分:1)

这适用于多次重复和多行:

    Pattern p = Pattern.compile("\\b(\\w+)\\b(?=.*\\b(\\1)\\b)", Pattern.DOTALL);

    String s = "I want to eat apple. apple is a fruit.\r\n I really want fruit.";
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println("at: " + m.start(1) + " " + m.group(1));
        System.out.println("    " + m.start(2) + " " + m.group(2));
    }

输出:

at: 0 I
    41 I
at: 2 want
    50 want
at: 14 apple
    21 apple
at: 32 fruit
    55 fruit

答案 1 :(得分:1)

您可以使用以下内容匹配一行中的所有重复字词。

(\\b\\w+\\b)(?=.*\\b\\1\\b)        // matches duplicates only in a single line

修改:如果您想在多行中匹配重复项,可以使用:

(\\b\\w+\\b)(?=[\\s\\S]*\\b\\1\\b)  // or the above regex with DOTALL flag

请参阅demo for single linedemo for multiple lines

答案 2 :(得分:0)

此方法删除任何非字母数字或空格的内容,在空白处拆分并创建Map个结果。

Stream.of("I? want.... to eat apple    eat apple.      apple, is! a fruit".split("[^\\p{L}\\p{N}]+"))
      .collect(Collectors.groupingBy(s -> s))

结果:

a=[a], apple=[apple, apple, apple], fruit=[fruit], want=[want], eat=[eat, eat], I=[I], is=[is], to=[to]