찾기 표현식 설명

찾기 표현식 설명

다음 예와 유사한 텍스트 파일이 여러 개 있습니다.

{
    {
        1,
        text1,
        text2,
    }
}
{
    {
        52,
        text1,
        text2,
    }
}
{
    {
        105,
        text1,
        text2,
    }
}

여러 파일을 대량으로 검색하고 다음과 같이 교체할 수 있는 방법이 궁금합니다.

{
    {
        17001,
        text1,
        text2,
    }
}
{
    {
        17052,
        text1,
        text2,
    }
}
{
    {
        17105,
        text1,
        text2,
    }
}

기본적으로 나는 각 이중 여는 괄호 뒤의 첫 번째 숫자 각각에 17,000을 추가할 것입니다. \d\d\d를 사용하여 숫자를 17\d\d\d로 바꾸려고 시도했지만 숫자가 아닌 문자가 17ddd로 표시되었습니다. 도와주세요

답변1

두 가지 문제가 있습니다.

  1. 대체 문자열에서는 \d"print a d"를 의미하며 그 이상은 의미하지 않습니다. \d및 등과 같은 모든 정규식 특수 항목은 \w대체 문자열이 아닌 검색 패턴에서만 작동합니다.
  2. @DavidPostill이 말했듯이 Notepad++는 정규 표현식 검색/바꾸기에서 수학을 수행할 수 없습니다.

원하는 작업을 수행할 수 있는 세 가지 옵션이 있습니다.

  1. 일부 프로그램, 스크립트 또는 플러그인을 사용하여 교체를 수행하십시오. 이전에 언급한 의견에서 알 수 있듯이 그 모든 버전은 여기서 주제를 벗어났습니다.
  2. Notepad++를 사용하여 검색하고 3번 바꿉니다.
    • 한 자리 숫자에 대해 1번 라운드,
    • 두 자리 숫자의 경우 두 번째 라운드,
    • 세 자리 숫자에 대해서는 세 번째 라운드입니다.
  3. v6.0보다 큰 Notepad++를 사용하는 경우 정규 표현식에서 PCRE 구문을 사용할 수 있으며훌륭한 답변@ACR을 통해 한 번에 모든 작업을 수행할 수 있습니다.

3단계 방법으로 이를 수행하려면 다음 단계를 사용하십시오. 원하는 것만 트래핑하려면 검색 패턴을 수정해야 할 수도 있습니다. 위에 제공한 샘플에서 작동하지만 파일이 샘플보다 더 복잡할 수 있습니다.

1라운드

이것을 찾으세요:

(\s+)(\d),

다음으로 바꾸세요:

\11700\2,

2라운드

이것을 찾으세요:

(\s+)(\d\d),

다음으로 바꾸세요:

\1170\2,

3라운드

이것을 찾으세요:

(\s+)(\d\d\d),

다음으로 바꾸세요:

\117\2,

기능

Find this패턴 에서는 \s+다음 토큰 이전에 찾을 수 있는 모든 공백을 찾습니다. 공백 이외의 숫자를 계산하는 것을 방지하려면 최소한 하나가 필요합니다. 그 주변 은 ()일치에서 반환된 첫 번째 캡처된 문자열이 됩니다. 는 \d한 자리 숫자와 일치하고 그룹은 \d\d정확히 \d\d\d두 자리 또는 세 자리 숫자와 일치하도록 만듭니다. 이번에도 ()두 번째 캡처 그룹으로 전환합니다. 마지막으로 ,숫자 뒤의 쉼표와 일치하므로 샘플 파일에서 같은 줄에 유지됩니다.

에서는 Replace with this\1첫 번째 캡처 그룹(공백)으로 대체됩니다. 1700, 170, 그리고 17라인에 추가해야 할 부분을 인쇄합니다. 는 \2찾기 패턴에 있는 숫자인 두 번째 캡처 그룹으로 대체됩니다. 마지막으로 쉼표는 ,캡처 그룹을 낭비하지 않고 명시적으로 대체됩니다.

답변2

한 번의 찾기 및 바꾸기로 이 작업을 수행할 수 있습니다. Notepad++를 사용하면 그룹 일치 여부에 따라 조건부 교체를 수행할 수 있습니다.

무엇을 찾다:

^(\s*)(\d{3})?(\d{2})?(\d{1})?(,\s*)$

다음으로 교체:

$1(?{2}17$2)(?{3}170$3)(?{4}1700$4)$5

찾기 표현식 설명

바깥쪽에서 안쪽으로 진행:

  • 및 문자 ^$각각 줄의 시작과 끝을 표시합니다.
  • (\s*)시작 부분의 공백과 일치하고 (,\s*)쉼표와 줄 끝의 모든 후행 공백과 일치합니다.
  • 중간에는 3자리, 2자리 또는 1자리 숫자(구문 사용 {n})와 일치하는 세 가지 다른 그룹이 있습니다. 각 그룹 뒤에는 ?일치하지 않을 가능성이 있음을 표시하는 기호가 붙습니다. 그룹은 나타나는 순서대로 일치하므로 그룹의 순서가 중요합니다. 세 자리 숫자가 있으면 첫 번째 그룹이 일치하고 다음 두 그룹 두 번째 일치에는 숫자가 남지 않습니다. 숫자가 두 개인 경우 첫 번째 그룹은 일치하지 않고 두 번째 그룹은 일치하며 첫 번째 그룹에는 일치하는 숫자가 없습니다.

바꾸기 표현식 설명

  • and $1$5줄 시작 부분의 공백과 줄 끝 부분의 쉼표 및 공백과 일치합니다.
  • 다음 그룹(반대 순서로 나열됨)에는 "17"과 find-expression에서 일치하는 그룹에 따라 올바른 수의 0이 추가됩니다. 예를 들어 첫 번째 그룹을 선택합니다 (?{2}17$2). ?{2}그룹 2가 일치하는지 여부를 확인합니다. 그렇다면 "17"이라는 텍스트와 일치하는 그룹 2(3자리 숫자여야 함)를 삽입합니다.

관련 정보