
Notepad++에서 찾기 및 바꾸기에 대한 도움이 필요합니다.
예:
$250 '안녕하세요 1' '____' 받기
$500 'Hello 2' '____' 받기
$1000 '안녕하세요 3' '____' 받기
'Hello 9999'까지 수천 개의 항목이 있다고 상상해 보세요.
'Hello 1' 또는 'Hello 2'를 변경하지 않고 '____'을 숫자로 바꾸고 싶습니다.
나는 결과가 다음과 같기를 바란다:
$250 '안녕하세요 1' '250' 가져가세요
$500 '안녕하세요 2' '500' 가져가세요
$1000 '안녕하세요 3' '1000' 가져가세요
이 작업을 어떻게 수행할 수 있나요? 정규식을 사용할 것으로 예상됩니다.
답변1
정규식 확인란을 선택하고 다음을 사용하십시오.
찾다:
\$(.*?) (.*?) Take '(.*?)'
바꾸다:
\$$1 $2 Take '$1'
기본적으로 다음과 같은 줄을 검색합니다.
$anything anything Take 'anything'
.*? 정규식에서 새 줄을 제외한 모든 문자를 의미합니다.
.*?와 같은 캡처 그룹을 괄호로 묶습니까? 그 내용은 $n이라는 변수에 저장됩니다. 여기서 n은 n번째 그룹입니다.
따라서 검색 후에는 세 가지 변수가 있습니다.
$1 = 250 $2 = 'Hello 1' $3 = ___
바꾸기를 사용하면 실제 전체 행을 \$로 바꿉니다(달러 기호를 이스케이프 처리하면 변수가 아닌 $가 됩니다).
전체 줄은 $$1 $2 '$1'로 대체됩니다.
보시다시피 첫 번째 캡처 그룹인 $1 변수를 다시 사용합니다.
나는 SO에 대해 아주 새로운 것이므로 내 설명이 그다지 훌륭하지 않다면 죄송합니다.
답변2
이는 찾기/바꾸기 대화 상자 하단에 있는 "정규식" 라디오 버튼을 선택한 Notepad++ 구문이어야 합니다.
Find: (\$(\d+).*Take\s+').*(')
Replace: \1\2\3
설명:
왼쪽에서 오른쪽으로 순서대로 괄호 그룹 변수:
(\$(\d+).*Take\s+').*(')
|--------1--------|
|-2-| |3|
\$ : 달러 기호 찾기를 의미합니다.
\d+ : 숫자 찾기를 의미하며, 끝에 있는 "+"는 하나 이상을 의미합니다(즉, 최소한 하나의 숫자여야 함).
.* : "." 모든 문자를 의미하고 "*"는 하나 이상을 의미합니다.
Take :는 구체적으로 Text라는 단어입니다.
\s+ : 공백 문자를 의미하고 "+"는 하나 이상을 의미합니다.
...
이제 작은따옴표의 마지막 문자를 제외한 모든 항목이 그룹화되므로 다음과 같습니다.
\1\2\3
첫 번째와 세 번째 괄호를 넣고 두 번째 괄호를 사이에 넣습니다(두 번째 괄호는 달러 가치임).
답변3
이 시도
먼저 정규식을 활성화하세요.
https://regex101.com/r/aW4gG2/2
찾기: (\$\d+)(.*Take ')(.*)(')
바꾸기:\1\2\1\4
포착
이 표현식에는 네 가지 그룹이 있습니다.
입력:$250 'Hello 1' Take '____'
그룹 1
(\$d+)
= $250
- 이것은 $(리터럴로 이스케이프됨)로 시작한 다음 숫자( \d
) 1 이상으로 시작하므로 3이든 15이든 마지막 숫자에서 중지됩니다. 귀하의 예에서는 줄의 시작 부분에 있었지만 저는 그렇지 않습니다. 그렇게 가정하십시오. 그러나 그들이 라인을 시작한다면 ^
만들기를 추가하고 싶을 수도 있습니다.^(\Sd+)
그룹 2
(.*Take ')
= 'Hello 1' Take '
- 표현은 .*
임의의 문자를 여러 번 의미하므로 볼 때까지 모든 것을 가져간 다음 내가 그것을 쓰고 거기에서 멈추기 때문에 Take
가져옵니다 .Take '
그룹 3
(.*)
= - ____
이는 기본적으로 내부 공간을 차지하며 0회 이상이 소요됩니다. 이 경우에는 모두 밑줄로 되어 있지만 작성하면 거기에 있는 모든 것과 모든 것을 가져옵니다. 언제 멈춰야 하는지 알려주는 다음 내용을 제외하고는 줄 끝까지 모든 것을 잡을 것입니다.
그룹 4
(')
= - '
이는 그룹 3에게 표시에서 멈추도록 지시합니다 '
. 또한 '
재배열을 위해 자체 그룹의 마크를 캡처합니다.
치환
\1\2\1\4
그룹은 여는 괄호로 번호가 매겨져 있지만 이 경우 모든 것이 중첩되지 않고 선형이므로 매우 분명합니다. \1\2\3\4
모든 것을 그대로 두겠습니다. 하지만 우리는 세 번째 그룹을 첫 번째 그룹으로 대체하고 싶기 때문에... \1\2\1\4
트릭을 수행합니다. 여기서 중요한 점 중 하나는 네 번째 그룹을 캡처하여 마지막에 교체하도록 하는 것이었습니다. 그 외에는 너무 까다로운 것이 없습니다.
실행
따라서 찾기 바꾸기에서 이를 설정한 다음 모두 바꾸기를 누르면 문제가 해결됩니다.
편집하다
대체품에서 $를 제거하고 싶기 때문에 기본적으로 동일하지만 초기 제안을 약간 변경해야 한다는 것을 알았습니다.
입력:$250 'Hello 1' Take '____'
찾기: (\$)(\d+)(.*Take ')(.*)(')
바꾸기:\1\2\3\2\5