특정 단어 사이의 특정 문자를 바꾸는 방법은 무엇입니까?

특정 단어 사이의 특정 문자를 바꾸는 방법은 무엇입니까?

Notepad++ 찾기/바꾸기 기능을 사용하여 특정 단어 사이의 특정 문자를 바꾸는 방법을 찾는 데 도움을 주실 수 있나요? 아래 예를 참조하세요. 'START'와 'END' 사이에 있는 하이픈을 모두 찾아서 공백으로 바꾸고 싶습니다. 문서의 다른 모든 하이픈은 대체되지 않습니다.

나는 구글에서 검색한 정규 표현식의 예를 사용하여 이 문제를 해결하려고 노력했지만 불행히도 지금까지 성공하지 못했습니다.

내가 가진 것은 다음과 같습니다.

START-Hyphens-should-be-replaced-here-01-END
OTHER-no-changes-here-02-WORD
START-Hyphens-should-also-be-replaced-here-03-END
OTHER-no-changes-here-either-04-TEXT

내가 갖고 싶은 것은 다음과 같습니다.

START Hyphens should be replaced here 01 END
OTHER-no-changes-here-02-WORD
START Hyphens should also be replaced here 03 END
OTHER-no-changes-here-either-04-TEXT

답변1

정규식을 완전히 포기하는 것이 좋습니다. 이와 같은 경우 정규식을 작동시키는 것은 너무 많은 문제입니다. 정규식으로 모든 것을 쉽게 해결할 수는 없습니다! 이 경우 대부분의 스크립팅 언어는 이를 매우 쉽게 수행할 수 있습니다. 나는 당신을 위해 JavaScript를 작성했습니다.여기- 구분 기호를 입력하고 입력한 후 제출을 클릭하세요.

설명을 하자면: 시작 구분 기호로 분할된 다음 각 '블록'에 대해 끝 구분 기호로 분할됩니다. 시작과 끝 사이에 있는 텍스트 블록으로 끝나고 그에 대해 대체를 수행합니다. 그런 다음 분할된 블록을 다시 결합합니다. 가장 효율적인 방법은 아니지만 개별 문자를 처리하는 것보다 조금 더 쉽습니다.

xkcd - 펄 문제


오래되고 부분적으로 작동하는 정규식 솔루션이 아래에 있습니다. 나무겁게사용하지 않는 것이 좋습니다.

빠른 답변: Notepad++를 사용하지 말고,이것JS 스니펫(오른쪽 하단에 텍스트를 입력하고 제출을 클릭하세요). 필요에 따라 왼쪽 하단의 스크립트에서 START및 를 교체하세요 .END

또는 Windows(Vista+)에 기본으로 제공되는 PowerShell을 사용할 수 있습니다.

Get-Content input.txt | %{ $_ -replace "(?<=START.*?)-(?=.*?END)", " " } | Out-File output.txt

input.txt그에 따라 교체하십시오 output.txt. 참고: 서로 다른 파일이어야 합니다.

이 특정 솔루션은 다음과 같은 경우에만 버그 없이 작동합니다.하나START줄당 발생그리고 하나END줄당 발생그리고여러 줄에 걸쳐 있지 않으므로 각 줄을 독립적으로 처리할 수 있습니다.


한 줄에 하나의 일치 항목만 필요하고 각 일치 항목이 한 줄 내에 포함된다는 보장을 고려하면 (?<=START.*?)-(?=.*?END)단일 공백에 대한 일치 및 교체가 작동합니다.제외하고Notepad++는 이 특정 패턴을 좋아하지 않는 것 같습니다. 이는 뒤돌아보기 및 미리보기(전체 PCRE인 것으로 보입니다)를 지원하지만 이에 대해 문제가 되는 부분이 있습니다.

Johannes가 이미 답변한 것과 유사한 대안은 간단한 패턴을 사용하고 (START.*?)-(.*?END)이를 \1 \2. 여기서 문제는 이것이 오직 일치한다는 것입니다.하나한 번에 한 줄씩 하이픈을 사용합니다. 이것은 금방 지루해집니다.

여기서는 보다 완전한 스크립팅 언어를 사용하려고 합니다. JavaScript는 좋은 대안입니다. 그러나 그것은그렇지 않다뒤돌아보기를 지원합니다. 장점으로는 루프에서 작업을 실행할 수 있으므로 이전의 지루한 솔루션이 실제로 실행 가능하다는 것입니다. 예시를 만들어봤습니다여기.

답변2

적합한 정규식은 입니다 (START[^\-]*)-(.*END). 이를 로 바꾸고 \1 \2"모두 바꾸기"를 여러 번 사용하십시오(클릭당 각 줄에서 하나만 바꾸기).

관련 정보