2010-08-20 11 views
11

So che per l'analisi dovrei idealmente rimuovere tutti gli spazi e le interruzioni di riga, ma stavo facendo questo come una soluzione rapida per qualcosa che stavo cercando e non riesco a capire perché non funziona .. Ho avvolto diverse aree di testo nel mio documento con i wrapper come "#### 1" e sto cercando di analizzare in base a questo ma non funziona, non importa quello che provo, penso che sto usando multilinea correttamente .. ogni consiglio è apprezzatoregex di Python, corrispondente a pattern su più righe .. perché non funziona?

Questo ha prodotto alcun risultato a tutti:

string=' 
####1 
ttteest 
####1 
ttttteeeestt 

####2 

ttest 
####2' 

import re 
pattern = '.*?####(.*?)####' 
returnmatch = re.compile(pattern, re.MULTILINE).findall(string) 
return returnmatch 
+1

Non verrà eseguito periodo, perché non si sta usando simboli stringa multilinea ' '' '' 'o ''" ' –

+0

ok, mi mancava questo concetto completamente quindi, scaverò attraverso la documentazione per trovare dove menziona questo .. grazie – Rick

+3

Il tuo compito a 'stringa' è un errore di sintassi. Intendevi usare' '' '?? – msw

risposta

12

Prova re.findall(r"####(.*?)\s(.*?)\s####", string, re.DOTALL) (funziona con re.compile troppo, naturalmente).

Questa espressione regolare restituirà tuple contenenti il ​​numero della sezione e il contenuto della sezione.

Per l'esempio, questo restituirà [('1', 'ttteest'), ('2', ' \n\nttest')].

(BTW: il tuo esempio non funzionerà, per le stringhe multilinea, utilizzare ''' o """)

+0

grazie, questo funziona – Rick

19

multilinea non significa . corrisponderà ritorno linea, significa che ^ e $ sono limitati alle linee solo

re.M re.MULTILINE

Quando specificato, il carattere del modello '^' corrisponde all'inizio della stringa e alla> begi nning di ogni riga (immediatamente dopo ogni newline); e il carattere pattern '$'> corrisponde alla fine della stringa e alla fine di ogni riga (immediatamente prima di ogni> nuova riga). Per impostazione predefinita, '^' corrisponde solo all'inizio della stringa e '$' solo all'estremità> della stringa e immediatamente prima della fine riga (se presente) alla fine della stringa.

re.S o re.DOTALL rende . partita anche nuove linee.

Fonte

http://docs.python.org/