2012-11-07 2 views
0

나는이 메모 간격과 같은 파일에 새 줄을 표시했습니다.이전 줄에 세미 콜론을 추가하십시오.

Hello World) 
    ; 

Hello World) ; 

Hello World) 
; 

나는 이전 줄 내가 얻고

with open(path) as f: 
    prev_line ='' 
    for current_line in f: 
     matched = re.match('[^(.+)];',current_line,re.MULTILINE) 
     if matched is not None: 
      current_line = re.sub('[^(.+)];','',current_line,re.MULTILINE) 
      prev_line = re.sub(r'^(.+)$',r'\1 ;',prev_line,re.MULTILINE) 
     print prev_line.strip() 
     prev_line = current_line.strip() 

을의 끝에 세미콜론을 이동하는 작은 파이썬 스크립트를 작성했습니다 예상 밖으로 세미콜론

누락 마지막 줄을 제외하고 넣어
Hello World) ; 





Hello World) ; 



Hello World) **semicolon is missing here** 

답변

3

당신은 \s*를 사용하여 시도해야합니다 :

>>> import re 
>>> s = '''Hello World) 
...   ;''' 
>>> re.sub(r'\s*;', ';', s) 
'Hello World);' 

\s*;은 세미콜론 다음에 오는 공백 (줄 바꿈 포함)과 일치합니다.

또한

, 그 패턴의 인스턴스 수에 re.sub() 작품, 그래서 당신은 단지 같은 것을 할 수있는 : 세미콜론은 항상 경우

with open(path) as f: 
    fixed = re.sub(r'\s*;', ';', f.read()) 
+0

Hello World)와; 다른 줄에 그래서 공간이 일치하지 않을 것 같아요 –

+0

네, 당신은 멀티틴 정규식에 맞습니다. 나는 그것을 올바르게 할 수 있지만 마지막 세미콜론은 어떤 이유로 빠져 있습니다. –

+0

확실합니까? re.MULTILINE'은 할 일이 있습니다 그것으로? 여기에'^'나'$ '도 쓰이지 않고, 이것 없이는 같은 답을 줄 것 같습니다. – DSM

0
with open('path/to/file') as infile: 
    lines = infile.readlines() 

if lines[-1].strip() == ';': 
    lines.pop() 
if lines[-1].strip()[-1] != ';' 
    lines[-1] = lines[-1].rstrip() + ';' 

with open('path/to/file', 'w') as outfile: 
    outfile.write(''.join(lines)) 

희망이

0

도움을 그 자신 만의 행을 만들려면 파일을 반복하여 찾으면 다음과 같이 이전 행의 끝에 추가 할 수 있습니다.

file = open(path, 'r') 
lines = file.readlines() 
for line in lines: 
    if ';' in line: 
    lines[lines.index(line)-1] += line 
    lines.remove(line) 

각주 : ';'앞에 공백을두기를 원한다면 정말 확실하지 않았습니다. 나는 가능한 가장 간단한 해결책을 모았다.

관련 문제