저는 정규식 초보자이고 다음과 같은 중복 된 연속 단어를 “일치”하는 단일 정규식을 작성하는 방법을 알 수 없습니다.
파리 하여 봄.
아니 그 그 관계가있다.
왜 웃어요? 인가 내 내 정규 표현식은 나쁜?
위의 모든 굵은 문자열과 일치하는 단일 정규식이 있습니까?
답변
다음 정규식을 시도하십시오.
\b(\w+)\s+\1\b
다음 \b
은 단어 경계이며 \1
첫 번째 그룹의 캡처 된 일치를 참조합니다.
답변
이 정규식이 더 많은 상황을 처리한다고 생각합니다.
/(\b\S+\b)\s+\b\1\b/
좋은 테스트 문자열은 여기에서 찾을 수 있습니다 : http://callumacrae.github.com/regex-tuesday/challenge1.html
답변
아래 RE로 시도하십시오.
- \ b 단어 단어 경계의 시작
- \ W + 모든 단어 문자
- \ 1 이미 일치하는 같은 단어
- \ b 단어 끝
-
() * 다시 반복
public static void main(String[] args) { String regex = "\\b(\\w+)(\\b\\W+\\b\\1\\b)*";// "/* Write a RegEx matching repeated words here. */"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE/* Insert the correct Pattern flag here.*/); Scanner in = new Scanner(System.in); int numSentences = Integer.parseInt(in.nextLine()); while (numSentences-- > 0) { String input = in.nextLine(); Matcher m = p.matcher(input); // Check for subsequences of input that match the compiled pattern while (m.find()) { input = input.replaceAll(m.group(0),m.group(1)); } // Prints the modified sentence. System.out.println(input); } in.close(); }
답변
널리 사용되는 PCRE 라이브러리는 이러한 상황을 처리 할 수 있습니다 ( 하지만 POSIX 호환 정규식 엔진으로 는 동일하게 달성 할 수 없습니다 ).
(\b\w+\b)\W+\1
답변
이것은 내 트 위치 봇에서 중복 문구를 제거하는 데 사용하는 정규식입니다.
(\S+\s*)\1{2,}
(\S+\s*)
공백이 아닌 문자열을 찾은 다음 공백을 찾습니다.
\1{2,}
그런 다음 일치시킬 문자열에서 해당 구문의 2 개 이상의 인스턴스를 찾습니다. 동일한 문구가 3 개 있으면 일치합니다.
답변
연속 된 단어 수를 찾으려면 아래 표현식이 올바르게 작동해야합니다. 일치는 대소 문자를 구분하지 않을 수 있습니다.
String regex = "\\b(\\w+)(\\s+\\1\\b)*";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
// Check for subsequences of input that match the compiled pattern
while (m.find()) {
input = input.replaceAll(m.group(0), m.group(1));
}
샘플 입력 : Goodbye goodbye GooDbYe
샘플 출력 : Goodbye
설명:
정규식 :
\ b : 단어 경계의 시작
\ w + : 모든 단어 문자
(\ s + \ 1 \ b) * : 이전 단어와 일치하고 단어 경계로 끝나는 단어가 뒤에 오는 임의의 수의 공백. *로 묶인 모든 것은 하나 이상의 반복을 찾는 데 도움이됩니다.
그룹화 :
m.group (0) : 위의 경우 일치하는 그룹을 포함합니다 Goodbye goodbye GooDbYe
m.group (1) : 위의 경우 일치하는 패턴의 첫 단어를 포함합니다 Goodbye
Replace 메서드는 연속적으로 일치하는 모든 단어를 단어의 첫 번째 인스턴스로 대체합니다.
답변
아니요. 그것은 불규칙한 문법입니다. 사용할 수있는 엔진 / 언어 별 정규식이있을 수 있지만이를 수행 할 수있는 범용 정규식은 없습니다.