2016-07-24 1 views
1

메모장 ++ (버전 6.9.2)을 사용 중입니다.메모장을 사용하여 역 추적을 사용하는 동안 정규식을 찾거나 바꿀 때 공백을 제거 할 수 있습니까?

나는 다시 배열하고 정리해야하는 고정 너비 플랫 파일 데이터베이스가 있습니다. 파일의

예 : 여기

0001168500Mel  Maenyey Legal College                  91PO Box 867                       Lutghjhe           403003Jellisa Moneyey            07 3660 2551  07 3660 2211  [email protected]             

내 현재의 '발견'정규식 :

^(.{10})(.{100})(.{2})(.{50})(.{50})(.{50})(.{4})(.{2})(.{60})(.{20})(.{20})(.{80}) 

여기 내 '대체'정규식 :

"$1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12" 

다음은 잘 작동 그러나 나는하고자한다 :

  1. 채우기 공백 (오른쪽 또는 왼쪽)을 복사하지 않습니다.
  2. 숫자 값에서 왼쪽 '0'을 제거하십시오.이 예제 파일에는 없지만 다른 파일에는 일부가 있습니다.

동일한 정규 표현식에서 어디에서 가능한지 예제를 검색하고 찾을 수 없습니다. 나는 후 다른 정규식을 할 수 있지만, 이것에 추가 할 빠르고 쉬운 무언가가있는 경우는이 출력 좋은 ;-)

+2

여러 단계로 수행하는 것이 더 쉽습니다. 정규식을 적용하고 모든 것이 쉼표로 깔끔하게 구분 된 후에는 "[0] + | +"'를'' –

+0

'으로 바꿀 수 있습니다.이 포스트 프로세싱을 파이썬 스크립트에 쉽게 추가 할 수있을 것 같습니다. 관심이있는 분이라면 여분의 시간이있을 때 "요리"할 것입니다. –

답변

0

현재 정규식 수율이 될 것입니다 : 정규식 접근 방식

"0001168500","Mel  Maenyey Legal College                  ","91","PO Box 867          ","             ","Lutghjhe           ","4030","03","Jellisa Moneyey            ","07 3660 2551  ","07 3660 2211  ","[email protected]             " 

문제 너비 필드를 고정시키고 가능한 앞자리 0과 앞/뒤 공백의 수는 가변적이라는 것입니다. 비록 어떤 경우에는 소유욕 일치와 lookbehinds 도움이 될 수 있지만, 나는 더 유연한, 코드 기반 접근 방식을 사용하는 것이 좋습니다.

Install the working PythonScript version , 다음과 같은 내용으로 스크립트 파일을 작성합니다

import re 
def repl(match): 
    return '"{0}","{1}","{2}","{3}","{4}","{5}","{6}","{7}","{8}","{9}","{10}","{11}"'.format(
     digit_reg.sub(r'\1', match.group(1).strip()), 
     digit_reg.sub(r'\1', match.group(2).strip()), 
     digit_reg.sub(r'\1', match.group(3).strip()), 
     digit_reg.sub(r'\1', match.group(4).strip()), 
     digit_reg.sub(r'\1', match.group(5).strip()), 
     digit_reg.sub(r'\1', match.group(6).strip()), 
     digit_reg.sub(r'\1', match.group(7).strip()), 
     digit_reg.sub(r'\1', match.group(8).strip()), 
     digit_reg.sub(r'\1', match.group(9).strip()), 
     digit_reg.sub(r'\1', match.group(10).strip()), 
     digit_reg.sub(r'\1', match.group(11).strip()), 
     digit_reg.sub(r'\1', match.group(12).strip()) 
    ) 

pat = r'^(.{10})(.{100})(.{2})(.{50})(.{50})(.{50})(.{4})(.{2})(.{60})(.{20})(.{20})(.{80})' 
digit_reg = re.compile(r'^0+([0-9]*)$') 
editor.rereplace(pat, repl) 

당신이 패턴은 별도의 필드와 일치하는 데 사용됩니다. 일치 데이터 객체는 repl 메소드로 전달되며, 각 필드는 앞/뒤 공백에서 .strip() 메소드로 트리밍되고 ^0+([0-9]*)$ 정규 표현식은 모든 필드에 적용되어 구성되는 문자열에서 앞에 오는 0을 제거합니다 자리 수.

enter image description here

관련 문제