2010-03-02 17 views

cevap

2

Bu, dosyayı bir bütün dizeye dağıtabilirsiniz ve yeniden kullanarak deseninizi eşleştirebilirsiniz.

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

İstediğinizi yapmak için daha iyi yollar vardır;

+0

Çünkü. * Açgözlüdür, bir dosyada yalnızca 'desen' örneğini bulacaktır. Re.M bayrağını belirttiğinizden beri, dosyadaki her yeni satırın hemen karşısındaki $ eşleşmesi, yani açgözlü. * Ve re.DOTALL, ilk. * Dosyadaki son 'kalıptan önceki her şeyle eşleşecek ve ikincisi Son 'desen' sonra her şeyi maç. –

+1

ne olursa olsun. OP tam olarak ne yapmak istediğinden emin olmadığımızdan, bu tam bir çözüm değildir. Yapabileceğim en iyi şey, tüm dosyayı bir dize olarak okuyabildiğini ve normal dizgiler gibi normal ifadeleri kullanabileceğini söylemek. – ghostdog74

10

Tüm dosyayı bir dizeye okuyun, ardından \ A bir dizenin yalnızca başlangıcıyla eşleşir ve \ Z yalnızca bir dizenin sonuna denk gelir. Re.MULTILINE ile '^', bir satırsonu hemen sonra ve dizesinin başlangıcıyla eşleşir ve '$' dizesi ve dizgisinin sonuna yeni satırdan hemen önce eşleşir. re syntax için Python belgelerine bakın.

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) 

Çıktı:

['sentence one.', 'sentence two.', 'sentence three.', 'sentence four.'] 
['sentence one.'] 
['sentence four.']