답변:
정규 표현식을 사용하여 한 줄에서 연속적인 중복 단어를 제거 할 수 있지만 연속적이지 않은 중복 된 단어 (예 :)를 제거 할 수는 없다고 생각합니다 dangerous, hazardous, dangerous
.
이 정규 표현식은 2 개의 중복 된 단어이든 10 개의 중복 된 단어이든 연속 된 모든 중복 된 단어를 제거합니다 \b(\w+)(?:,\s+\1\b)+
.
정확히 같은 쉼표가없는 정규식은 다음과 같습니다. \b(\w+)(?:\s+\1\b)+
(다른 사용자에게 유용 할 수 있습니다).
중복 된 두 단어 (복식)에 대해서만 정규식을 사용하려면이 정규식을 사용하십시오 (\b\w+\b)\W+\1
.
이 정규 표현식을 바꿀 내용 상자에 두어 단어를 한 번만 표시하십시오 (그렇지 않으면 반복되는 모든 단어가 제거됨) ${1}
.
이 정규 표현식은 질문에 설명 한 것과 같은 상황을 예로 들어 수정합니다. 첫 번째 정규 표현식은 모든 중복 단어 수 (예 dangerous, dangerous, dangerous, dangerous, hazardous
:)에 대해 작동하지만 두 번째 버전은 두 개의 중복 단어 (예 :)에 대해서만 작동합니다 dangerous, dangerous, hazardous
.
참고 : 정규 표현식은 형식이 좋아하는 것을 의미 질문에 설명 된 형식에 적용됩니다은 two words, two words, anotherword
, two-words, two-words, anotherword
, three words expression, three words expression, anotherword
정규식이 그들에게 적용하지 않기 때문에 변경되지 않습니다.
(\b\w+\b)\W+\1
두 개의 중복 단어에 대해 작동 합니다. 답변을 편집하겠습니다. 쉼표는 다른 정규 표현식이 작동하지 않는 이유입니다.
word, word, anotherword
. 그러나, 당신은 약간 다른 것과 같은 많은 인스턴스를 가지고 있으며 came across, came across
, 일부는 3 또는 4 단어로 있습니다. 또한 '
like 가있는 단어가 don't
있으며 Notepad ++ 정규식 시스템 에서 일을 더 복잡하게 만듭니다 . 메모장 ++ 정규식 시스템은 꽤 성가 시며 제한적이므로 해결책은 파이썬 (또는 다른 언어)에서 정규식을 사용하거나 메모장 ++에 대한 형식 별 정규 표현식을 만드는 것입니다.
작업을 수행하는 방법은 다음과 같습니다. 이렇게하면 모든 중복 단어가 인접하지 않더라도 대체됩니다.
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
설명:
(?:^|\G) : non capture group, beginning of line or position of last match
(\b\w+\b) : group 1, 1 or more word character (ie. [a-zA-Z0-9_]), surrounded by word boundaries
,? : optional comma
(?=.*\1) : positive lookahead, check if thhere is the same word (contained in group 1) somewhere after
다음과 같은 입력이 주어집니다.
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
우리는 얻었다 :
dangerous,hazardous,perilous
dangerous,hazardous,dangerous,perilous
? 다시 말해, 중복 된 단어는 항상 서로 옆에 있습니까?