2012-09-23 18 views
6

Sono passato a Python abbastanza recentemente e sono interessato a ripulire un numero molto grande di pagine web (circa 12k) (ma può essere considerato altrettanto facilmente come file di testo) rimuovendo alcuni tag particolari o altri pattern di stringhe. Per questo sto usando la funzione re.sub (..) in Python.Sostituzione usando più regexes o uno più grande in Python

La mia domanda è se è meglio (dal punto di vista dell'efficienza) creare una grande espressione regolare che corrisponda a più dei miei schemi o chiamare la funzione più volte con espressioni regolari più piccole e più semplici.

Per esemplificare, è meglio usare qualcosa come

re.sub(r"<[^<>]*>", content) 
re.sub(r"some_other_pattern", content) 

o

re.sub(r"<[^<>]*>|some_other_pattern",content) 

Naturalmente, per il bene di esemplificare i modelli precedenti sono molto semplici e non li ho compilato qui, ma nello scenario della mia vita reale lo farò.

LE: La domanda non è correlata alla natura HTML dei file, ma al comportamento di Python quando si gestiscono modelli di regex multipli.

Grazie!

+2

[Avviso obbligatorio sull'analisi dell'HTML con espressioni regolari] (http://stackoverflow.com/a/1732454/950912) – brc

+0

In realtà, come ho detto, non si tratta principalmente di rimuovere e analizzare il testo HTML, ma di rimuovere alcuni particolari non- Modelli correlati a HTML. La mia domanda può anche essere posta più in generale su semplici file di testo e sostituire una serie di modelli in essi –

+0

Penso che si tratti di quanto sei bravo con la regex ... se puoi farlo con uno che usare uno ... I Probabilmente lo romperesti in parecchi solo per renderlo più semplice da analizzare ... –

risposta

3

Semplicità.

Direi che sei più sicuro usando i Regex più piccoli per analizzare questa roba. Almeno in questo modo se si comporta in modo anomalo, non devi andare a scavare per scoprire quale particolare sezione del massiccio Regex si comporta in modo strano. Se si dispone di una buona registrazione delle sostituzioni che si fanno, sarebbe banale determinare l'origine del problema, qualora dovesse sorgere.

Non si vuole incorrere in this

2

Parlando in generale, "sequenziale" e l'applicazione "parallelo" non è la stessa e potrebbe produrre risultati diversi, perché le sostituzioni sequenziali possono influenzare a vicenda.

Per quanto riguarda le prestazioni, immagino che un'espressione funzionerà meglio, ma è solo un'ipotesi. Personalmente preferisco mantenere la complessità e utilizzare la modalità "verbose" per motivi di leggibilità.

1

Ho compreso il tuo commento aggiuntivo riguardante "le parti non HTML che sto pulendo". A causa della possibilità che un ultimo RE trovi e sostituisca il contenuto sostituito da una precedente RE, è meglio usare l'operatore "alternativo" e utilizzare una singola RE.

Inoltre, considerare l'utilizzo di BeautifulSoup per caricare ed esaminare i file HTML. Questo aiuterà a trovare le parti appropriate del tuo testo con un rischio molto minore di acquisire un costrutto HTML quando stavi solo cercando di sostituire del testo.

Problemi correlati