메모장 ++를 사용하여 모든 줄에 중복 된 단어를 모두 제거하는 방법은 무엇입니까?


11

키워드가있는 줄이 포함 된 파일을 작업 중이며 일부 줄에는 중복 된 키워드가 있습니다.

예를 들면 다음과 같습니다.

dangerous,dangerous,hazardous,perilous

메모장 ++에 줄 당 중복 된 모든 단어를 제거하고 싶다고 말하고 싶습니다. 이 예제 dangerous,에서는 제거됩니다.

dangerous,hazardous,perilous

나는 그런 줄을 많이 가지고 있기 때문에 자동화 된 방법을 찾고 있습니다.


1
무엇에 대해 dangerous,hazardous,dangerous,perilous? 다시 말해, 중복 된 단어는 항상 서로 옆에 있습니까?
다니엘 벡

답변:


11

정규 표현식을 사용하여 한 줄에서 연속적인 중복 단어를 제거 할 수 있지만 연속적이지 않은 중복 된 단어 (예 :)를 제거 할 수는 없다고 생각합니다 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정규식이 그들에게 적용하지 않기 때문에 변경되지 않습니다.


도와 주셔서 감사합니다! 그러나 0 건의 발생이 발생했습니다. 제안한대로 분리 된 키워드 로이 작업을 시도했지만 작동하지 않았습니다. 이전과 마찬가지로 시도했지만 화면 캡처를 확인하십시오. goo.gl/eZ7Kp
Gabriel

이 정규 표현식은 (\b\w+\b)\W+\1두 개의 중복 단어에 대해 작동 합니다. 답변을 편집하겠습니다. 쉼표는 다른 정규 표현식이 작동하지 않는 이유입니다.
amiregelz

나는 가능한 모든 조합, 쉼표, 공백, 공백 및 쉼표를 시도했지만 아무것도 시도하지 않았습니다. 여기에 텍스트 파일이 있습니다 : goo.gl/sP20z
Gabriel

문제는 내가 대답으로 쓴 정규 표현식이 당신이 요구 한 형식 (나는 생각한 것)에만 적용된다는 것입니다 word, word, anotherword. 그러나, 당신은 약간 다른 것과 같은 많은 인스턴스를 가지고 있으며 came across, came across, 일부는 3 또는 4 단어로 있습니다. 또한 'like 가있는 단어가 don't있으며 Notepad ++ 정규식 시스템 에서 일을 더 복잡하게 만듭니다 . 메모장 ++ 정규식 시스템은 꽤 성가 시며 제한적이므로 해결책은 파이썬 (또는 다른 언어)에서 정규식을 사용하거나 메모장 ++에 대한 형식 별 정규 표현식을 만드는 것입니다.
amiregelz

또 다른 문제는 복제 된 대부분의 단어가 이전 줄에도 표시되어 목표를 달성하기 어렵다는 것입니다. 모든 중복 단어 를 제거하려면 그렇게 어렵지 않았습니다. 당신은 같은 것을 할 수있는 & . 메모장 ++에서 특정 정규 표현식을 사용하거나 (복제 된 단어의 모든 형식을 알려주십시오) 문제에 대한 다른 접근법을 고려하십시오.
amiregelz

1

작업을 수행하는 방법은 다음과 같습니다. 이렇게하면 모든 중복 단어가 인접하지 않더라도 대체됩니다.

  • Ctrl+H
  • 무엇을 찾다: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • 다음으로 교체하십시오. LEAVE EMPTY
  • 감싸기 체크
  • 정규식 확인
  • 확인하지 마십시오 . matches newline
  • Replace all

설명:

(?:^|\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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.