2009-03-03 8 views
13

¿Hay alguna manera de depurar una expresión regular en Python? Y no me refiero al proceso de tratar y tratando hasta que funcionan :)¿Cómo puedo depurar una expresión regular en python?

EDIT: aquí es cómo expresiones regulares se pueden probar en Perl:


use re 'debug'; 

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

El código anterior produce la siguiente salida en mi computadora cuando corrió:


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: dar a SO su regex + muestra de datos? – annakata

+0

Sin código de muestra, todo lo que podemos hacer es adivinar cuál es tu problema. –

+3

No tengo un problema de expresiones regulares en este momento. Solo quiero saber cómo realizar la depuración. – Geo

Respuesta

1

¿Por qué no utilizar alguna herramienta de expresiones regulares (que suelen utilizar Regulator) y probar la expresión-regular allí y cuando esté satisfecho, simplemente copia/pega en su código.

+0

Porque el uso de una herramienta de expresión regular no me dirá por qué mi expresión regular no funciona. – Geo

+0

@Geo - ¿qué quiere decir con "no está funcionando"? ¿No está funcionando del todo, no coincide con las cosas que quieres unir o ...? – Rook

+1

A riesgo de afirmar lo obvio, una herramienta de expresión regular no puede decirle por qué no le está dando las coincidencias correctas. Una expresión regular va a hacer exactamente lo que le dice, y lo mejor que cualquier herramienta puede hacer es guiarlo para que pueda descubrir cuál es el error. – Noldorin

-1

No estoy seguro de hacer algo así directamente en Python, pero definitivamente podría sugerir el uso de una herramienta de edición de RegEx. Esa es probablemente la mejor apuesta de todos modos. Personalmente, he usado The Regulator y lo encontré muy útil. Algunos otros se enumeran en this SO thread.

-1

que muy a menudo utilizo RegexPal para un rápido control (prototipado una expresión regular en línea). Tiene muchas de las expresiones comunes enumeradas junto con una expresión simple. Es muy útil cuando no tienes una herramienta dedicada y solo necesitas una forma rápida de calcular una expresión regular.

+0

¿Por qué votar abajo? –

0

Lo RegexBuddy tiene que las otras herramientas que no tenemos es un sistema incorporado en debugger que muestra todo el proceso de coincidencia de ambos partidos intentos exitosos y fallidos. Las otras herramientas solo muestran el resultado final (que RegexBuddy también puede mostrar).

1

https://www.debuggex.com también es bastante bueno. Es un depurador en línea de Python (y un par de idiomas más), que tiene una visualización muy clara de lo que hace y lo que no coincide. Un recurso bastante bueno si necesita redactar una expresión regular rápidamente.

+2

Oh mi, esa es la mejor respuesta al final, me alegro de que busqué aquí.Es una gran herramienta, es gratis, está en línea (sin instalación, independiente del sistema operativo) y resolvió mi problema (un error estúpido) en lugar de}) en un abrir y cerrar de ojos. ¡Gracias! – Davide

Cuestiones relacionadas