2010-03-02 11 views

risposta

2

Forse dovresti porre la tua domanda più chiaramente, come quello che stai cercando di fare. Detto questo, puoi slurpare il file in un'intera stringa e abbinare il tuo pattern usando re.

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

Ci sono modi migliori per fare ciò che vuoi, qualunque esso sia, senza re.

+0

Perché. * È avido, che troverà solo un'istanza di 'modello' in un file. Dato che hai specificato il flag re.M, $ corrisponde appena prima di ogni nuova riga nel file, quindi con greedy. * E re.DOTALL, il primo * corrisponderà a tutto prima dell'ultimo 'pattern' nel file e il secondo sarà abbinare tutto dopo l'ultimo 'modello'. –

+1

qualunque cosa. questa non è una soluzione completa, poiché non siamo sicuri di cosa OP voglia davvero fare. Il meglio che posso fare è dirgli che può leggere l'intero file come una stringa e regex su di esso proprio come le normali stringhe. – ghostdog74

10

Leggere l'intero file in una stringa, quindi \ A corrisponde solo all'inizio di una stringa e \ Z corrisponde solo alla fine di una stringa. Con re.MULTILINE, '^' corrisponde all'inizio della stringa e subito dopo una nuova riga, e '$' corrisponde alla fine della stringa e poco prima di una nuova riga. Consultare la documentazione di Python per re syntax.

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) 

uscita:

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