pythonregexdebugging

How can I debug a regular expression in Python?


Is there a way to debug a regular expression in Python? And I'm not referring to the process of trying and trying till they work :)

Here is how regexes can be debugged 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";
}

The code above produces the following output on my computer when ran:

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

Solution

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

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