2010-03-02 7 views

답변

2

어쩌면 당신이하고자하는 것과 같은 질문을 더 분명하게 제기해야 할 것입니다. 즉, 파일을 하나의 전체 문자열로 스 루핑하고 re를 사용하여 패턴을 일치시킬 수 있습니다.

import re 
data=open("file").read() 
pat=re.compile("^.*pattern.*$",re.M|re.DOTALL) 
print pat.findall(data) 

무엇이든지간에 무엇이든 할 수있는 더 좋은 방법이 있습니다.

+0

. *는 욕심이 많기 때문에 파일에서 '패턴'인스턴스를 하나만 찾습니다. re.M 플래그를 지정 했으므로 $는 파일의 모든 개행 직전과 일치하므로 greedy. * 및 re.DOTALL의 경우 첫 번째. *는 파일의 마지막 '패턴'앞에있는 모든 것과 일치하고 두 번째는 마지막 '패턴'이후의 모든 것을 일치시킵니다. –

+1

. 우리가 OP가 정말로하고 싶어하는 것이 확실하지 않기 때문에 이것은 완전한 해결책이 아닙니다. 내가 할 수있는 최선의 방법은 문자열로 전체 파일을 읽고 일반 문자열처럼 정규식을 수행 할 수 있다고 알려주는 것입니다. – ghostdog74

10

전체 파일을 문자열로 읽은 다음 \ A는 문자열의 시작 부분과 만 일치하고 \ Z는 문자열 끝 부분 만 찾습니다. re.MULTILINE을 사용하면 '^'은 줄 바꿈 뒤의 문자열의 시작과 일치하며 '$'는 줄 바꿈 바로 전에 문자열의 끝과 일치합니다. re syntax에 대한 Python 설명서를 참조하십시오.

import re 

data = '''sentence one. 
sentence two. 
a bad sentence 
sentence three. 
sentence four.''' 

# find lines ending in a period 
print re.findall(r'^.*\.$',data,re.MULTILINE) 
# match if the first line ends in a period 
print re.findall(r'\A^.*\.$',data,re.MULTILINE) 
# match if the last line ends in a period. 
print re.findall(r'^.*\.$\Z',data,re.MULTILINE) 

출력 :

['sentence one.', 'sentence two.', 'sentence three.', 'sentence four.'] 
['sentence one.'] 
['sentence four.'] 
관련 문제