포착

포착

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

이 시도

먼저 정규식을 활성화하세요.

정규식을 켜기 위한 Notepad++ 설정

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

관련 정보