2009-03-03 19 views
13

Esiste un modo per eseguire il debug di un'espressione regolare in Python? E non mi riferisco al processo di cercare e provare fino a quando non funzionano :)Come posso eseguire il debug di un'espressione regolare in python?

EDIT: ecco come espressioni regolari sono verificabili in perl:


use re 'debug'; 

my $str = "GET http://some-site.com HTTP/1.1"; 
if($str =~/get\s+(\S+)/i) { 
    print "MATCH:$1\n"; 
} 

Il codice precedente produce il seguente output sul mio computer quando correva:


Compiling REx "get\s+(\S+)" 
Final program: 
    1: EXACTF (3) 
    3: PLUS (5) 
    4: SPACE (0) 
    5: OPEN1 (7) 
    7: PLUS (9) 
    8:  NSPACE (0) 
    9: CLOSE1 (11) 
    11: END (0) 
stclass EXACTF minlen 5 
Matching REx "get\s+(\S+)" against "GET http://some-site.com HTTP/1.1" 
Matching stclass EXACTF against "GET http://some-site.com HTTP/1.1" (33 chars) 
    0   | 1:EXACTF (3) 
    3  | 3:PLUS(5) 
            SPACE can match 1 times out of 2147483647... 
    4  | 5: OPEN1(7) 
    4  | 7: PLUS(9) 
            NSPACE can match 20 times out of 2147483647... 
    24  | 9: CLOSE1(11) 
    24  | 11: END(0) 
Match successful! 
MATCH:http://some-site.com 
Freeing REx: "get\s+(\S+)" 

+0

Seriamente: assegna SO alla tua espressione regolare + dati di esempio? – annakata

+0

Senza codice di esempio, tutto quello che possiamo fare è indovinare qual è il tuo problema. –

+3

Al momento non ho un problema di regex. Voglio solo sapere come eseguire il debug. – Geo

risposta

17
 

>>> p = re.compile('.*', re.DEBUG) 
max_repeat 0 65535 
    any None 
>>>       
 

regex '|' operator vs separate runs for each sub-expression

+7

Questa è solo la metà della risposta, mostra a cosa è compilata l'espressione regolare, ma non mostra come viene eseguita contro una determinata stringa. Se qualcuno conosce l'altra metà, per favore condividi! – Nickolay

1

Perché non si utilizza qualche strumento regex (io di solito uso Regulator) e testare l'espressione regolare espressione lì e quando si è soddisfatti, basta copiare/incollare nel vostro codice.

+0

Perché l'uso di uno strumento regex non mi dice perché la mia espressione regolare non funziona. – Geo

+0

@Geo - cosa intendi esattamente per "non funziona". Non funziona affatto, non corrisponde alle cose che vuoi abbinare o ...? – Rook

+1

A rischio di affermare l'ovvio, uno strumento di regex non può dirti perché non ti sta dando le giuste corrispondenze. Una regex farà esattamente quello che dici, e il meglio che uno strumento può fare è passarti attraverso in modo che tu possa capire da te quale bit è sbagliato. – Noldorin

-1

Non sono sicuro di fare una cosa simile direttamente in Python, ma potrei sicuramente suggerire di utilizzare uno strumento di editor RegEx. Comunque è probabile che sia la soluzione migliore. Personalmente, ho usato The Regulator e l'ho trovato molto utile. Alcuni altri sono elencati in this SO thread.

-1

ho abbastanza spesso uso RegexPal per controlli rapidi (online espressione regolare prototipatore). Ha un sacco di espressioni comuni elencate insieme ad una semplice espressione. Molto utile quando non si dispone di uno strumento dedicato e solo bisogno di un modo rapido per elaborare una regolare regex.

+0

Perché il down-vote? –

0

Ciò che RegexBuddy ha che gli altri strumenti non hanno è un debugger integrato che mostra l'intero processo di corrispondenza di entrambi i tentativi di corrispondenza riusciti e falliti. Gli altri strumenti mostrano solo il risultato finale (che può essere mostrato anche da RegexBuddy).

1

https://www.debuggex.com è anche abbastanza buono. È un debugger online Python (e un paio di altre lingue), che ha una visualizzazione abbastanza accurata di cosa fa e cosa non corrisponde. Una buona risorsa se hai bisogno di redigere un regexp velocemente.

+2

Oh mio, questa è la migliore risposta in fondo, sono contento di aver scavato qui.È un ottimo strumento, è gratuito, è online (nessuna installazione, indipendente dal sistema operativo) e ha risolto il mio problema (uno stupido errore di battitura invece di}) in un batter d'occhio! Grazie! – Davide

Problemi correlati