>

문장에서 반복되는 단어를 찾기 위해 정규식을 작성하려고했습니다. 글쎄, 나는이 표현을 사용해 보았습니다 :

\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 변수를 사용하여 주어진 단어의 발생 횟수를 찾으려고하는 클래스 .


  • 답변 # 1

    정규식은 이와 같은 작업에 실제로 적합하지 않습니다. 정규 표현식은 사물을계산하지 않습니다. 정규식의 도움 으로이 작업을 수행 할 수 있지만 정규식으로 만 수행하는 것은 불가능하지는 않지만 매우 어렵습니다.

    내 시도는 :

    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()));
    
    

  • 답변 # 2

    이 패턴을 사용해보십시오 : (?<=\b| )([^ ]+)(?= |$).+(\1)  문자열에서 두 번 이상 나타나는 첫 단어를 감지합니다.

    데모

관련 자료

  • 이전 ios - 자동 레이아웃 제약 조건 첫 번째 항목과 두 번째 항목은 어떻게 작동합니까?
  • 다음 javascript - RGB 색상 혼합 알고리즘에 16 진수 색상 추가