2009-03-03 15 views
13

Czy istnieje sposób debugowania wyrażenia regularnego w Pythonie? I nie mam na myśli proces próbuje i próbuje aż pracują :)Jak mogę debugować wyrażenie regularne w Pythonie?

EDIT: tutaj jest jak Wyrażenia regularne mogą być pozbawione błędów w Perlu:


use re 'debug'; 

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

Powyższy kod wygeneruje następujące wyniki na mój komputer kiedy prowadził:


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

Poważnie: podać SO swoje dane + próbki? – annakata

+0

Bez przykładowego kodu wszystko, co możemy zrobić, to odgadnąć, jaki jest twój problem. –

+3

Nie mam teraz problemu z wyrażeniem regularnym. Chcę tylko wiedzieć, jak przeprowadzić debugowanie. – Geo

Odpowiedz

1

Dlaczego nie można korzystać z niektórych funkcji regex (i zwykle używają Regulator) i przetestować tam regex ekspresję i kiedy jesteś zadowolony, po prostu skopiować/wkleić go w kodzie.

+0

Ponieważ użycie narzędzia regularnego wykańczania nie powie mi, dlaczego moje wyrażenie regularne nie działa. – Geo

+0

@Geo - co dokładnie masz na myśli, mówiąc "nie działa". Czy w ogóle nie działa, czy pasuje do rzeczy, które chcesz dopasować, czy ...? – Rook

+1

Na ryzyko stwierdzenia oczywistości, narzędzie do wyrażenia regularnego nie może powiedzieć, dlaczego nie daje właściwych dopasowań. Regex zrobi dokładnie to, co powiesz, a najlepsze, co może zrobić każde narzędzie, to przejście przez ciebie, abyś mógł sam się zorientować, co jest nie tak. – Noldorin

-1

Nie jestem pewien, jak to zrobić bezpośrednio w Pythonie, ale zdecydowanie mógłbym zaproponować użycie edytora RegEx. To i tak prawdopodobnie będzie najlepszym wyborem. Osobiście użyłem The Regulator i okazało się, że jest bardzo pomocne. Niektóre inne są wymienione w this SO thread.

-1

ja dość często używać RegexPal dla szybkich kontroli (online regularne Prototyper wyrażenie). Ma wiele wyrażeń wspólnych wymienionych wraz z prostym wyrażeniem. Bardzo przydatny, gdy nie masz dedykowanego narzędzia i po prostu potrzebujesz szybkiego sposobu na wypracowanie regex somple.

+0

Dlaczego głosowanie w dół? –

0

Co do RegexBuddy, którego nie mają inne narzędzia, to wbudowany debugger, który pokazuje cały proces dopasowania zarówno udanych, jak i nieudanych prób dopasowania. Pozostałe narzędzia pokazują jedynie wynik końcowy (który może również pokazać RegexBuddy).

1

https://www.debuggex.com jest również całkiem niezły. Jest to internetowy debugger Python (i kilka innych języków), który ma całkiem zgrabną wizualizację tego, co robi i co nie pasuje. Bardzo dobry zasób, jeśli chcesz szybko przygotować wyrażenie regularne.

+2

Och, to jest najlepsza odpowiedź na samym dole, cieszę się, że tu wykopałem.To wspaniałe narzędzie, jest darmowe, jest w trybie online (bez instalacji, niezależne od systemu operacyjnego) i rozwiązało mój problem (głupia literówka) zamiast}) w mgnieniu oka! Dzięki! – Davide