
다음 예와 유사한 텍스트 파일이 여러 개 있습니다.
{
{
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
두 가지 문제가 있습니다.
- 대체 문자열에서는
\d
"print ad
"를 의미하며 그 이상은 의미하지 않습니다.\d
및 등과 같은 모든 정규식 특수 항목은\w
대체 문자열이 아닌 검색 패턴에서만 작동합니다. - @DavidPostill이 말했듯이 Notepad++는 정규 표현식 검색/바꾸기에서 수학을 수행할 수 없습니다.
원하는 작업을 수행할 수 있는 세 가지 옵션이 있습니다.
- 일부 프로그램, 스크립트 또는 플러그인을 사용하여 교체를 수행하십시오. 이전에 언급한 의견에서 알 수 있듯이 그 모든 버전은 여기서 주제를 벗어났습니다.
- Notepad++를 사용하여 검색하고 3번 바꿉니다.
- 한 자리 숫자에 대해 1번 라운드,
- 두 자리 숫자의 경우 두 번째 라운드,
- 세 자리 숫자에 대해서는 세 번째 라운드입니다.
- 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자리 숫자여야 함)를 삽입합니다.