Notepad++의 RegEx 문자열 형식 지정

Notepad++의 RegEx 문자열 형식 지정

나는 RegEx에 능숙하지만 그것이 어떻게 작동하는지 알 수 없는 한 가지가 있습니다.

NotePad++에서 어떻게 검색/바꾸고 출력의 길이가 고정되어 있고 입력은 유연할 수 있는지 확인하려면 어떻게 해야 합니까?

예를 들어, 다음과 같은 정규식을 수행 23-6-2016하면 됩니다 : 23-06-2016(06에는 추가 0이 있지만 예를 들어 12인 경우에는 해당되지 않음)

또 다른 옵션은 다음을 만드는 것입니다.

TestString그리고 Test될 것입니다
TestString______________________(여분의 공백.)
Test____________________________(여분의 공백.)

물론 여기서의 아이디어는 출력의 길이가 모두 동일한 대량 검색/바꾸기를 수행하는 것입니다.

그 뒤에 숨겨진 생각을 설명해주세요.

편집: 작업 중인 데이터에 대한 아이디어를 제공하기 위해 처리해야 하는 행의 예는 다음과 같습니다.

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text

탭으로 구분되어 있습니다. 첫 번째 줄의 첫 번째 0은 0,00, 100은 100,00 형식이어야 하지만 12345678과 날짜는 ,00 형식으로 지정하면 안 됩니다. 마지막 100,5는 100,50 형식이어야 합니다.

데이트 문제는 이미 해결했으니 지금은 그게 덜 중요해요.

답변1

응답:

12345678 TXT 19700101 0 100 20160624 100 댓글 내용
12345678 TXT 19700101 100 100,25 20160624 0,25 댓글 내용
12345678 TXT 19700101 100,25 100,5 20160624 0,25 댓글 텍스트

4번째 열의 경우:
^((?:\S+\s+){3}\d+)(\s)to \1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)to\10\2

5/7번째 열:
위와 유사합니다. 규칙에서 각각 / {3}로 바꾸세요.{4}{6}

설명
첫 번째 규칙

그만큼첫 번째 규칙,0없는 숫자에 추가됩니다 ,. 이제 모든 숫자에는 가 있어야 합니다 ,\d.

두 번째 규칙

그만큼두 번째 규칙0쉼표 뒤에 한 자리 숫자가 있는 경우에는 a를 추가합니다 .

에 관해서는(?:):비캡처 그룹, 이전 열은 이미 캡처되었으므로 \1추가 캡처가 필요하지 않습니다.

숫자를 소수점 이하 2자리까지만 채웁니다. 임의의 양을 채우려면 pad excessively, then trim접근 방식을 사용하십시오.

마지막 말?
제 생각에는 notepad++와 같은 일반 정규식은 이 작업에 적합하지 않습니다. Bash나 Perl과 같은 일부 기본 스크립팅을 사용하면 훨씬 더 높은 가독성으로 이를 처리할 수 있습니다.

답변2

섹션 A: 특정 길이의 패드

정규식을 사용하여 N 문자로 줄을 오른쪽 채우려면 줄 끝에 N 공백을 추가한 다음 첫 번째 N 문자를 그룹화하여 나머지 문자를 대체합니다.

패스 1: 패딩 문자 추가

찾기: $바꾸기:______________________________

줄 끝에 공백 30개를 추가합니다. (게시물에서는 공백이 형식화되지 않기 때문에 밑줄을 사용했습니다.)

패스 2: 왼쪽 30자 자르기

줄 시작 부분에 대시로 구분된 날짜를 추가하려면 그에 따라 각 섹션을 일치시키세요.

찾기: ^([[:print:]]{0,30}).*$ 다음으로 바꾸기\1

줄 시작 부분에서 최대 30개의 인쇄 가능한 문자 그룹과 나머지 문자를 그룹으로 바꿉니다.

다른 선 길이를 선택하려면 패스 1에서 n 공백을 사용한 다음 30을 패스 2의 길이로 바꿉니다.

섹션 B: 날짜로 시작하는 줄

패스 1(월의 날짜):

찾을 내용: ^([0-9])- 다음으로 대체:0\1-

패턴(단일 숫자로 시작하고 대시가 오는 줄)을 패딩된 0, 숫자 및 대시로 바꿉니다.

패스 2(월):

찾을 내용: -([0-9])- 다음으로 대체:-0\1-

패턴(두 대시 사이의 단일 숫자)을 대시, 패딩된 ​​0, 숫자 및 대시로 바꿉니다.

관련 정보