답변:
정규 표현식을 사용하여 한 줄에서 연속적인 중복 단어를 제거 할 수 있지만 연속적이지 않은 중복 된 단어 (예 :)를 제거 할 수는 없다고 생각합니다 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? 다시 말해, 중복 된 단어는 항상 서로 옆에 있습니까?