how to handle repetitive regexp match checks

GiddyJP GiddyJP at cf.ac.uk
Fri Mar 18 14:07:08 CET 2005


Matt Wette wrote:
> 
> Over the last few years I have converted from Perl and Scheme to
> Python.  There one task that I do often that is really slick in Perl
> but escapes me in Python.  I read in a text line from a file and check
> it against several regular expressions and do something once I find a 
> match.
> For example, in perl ...
> 
>     if ($line =~ /struct {/) {
>       do something
>     } elsif ($line =~ /typedef struct {/) {
>       do something else
>     } elsif ($line =~ /something else/) {
>     } ...
> 
> I am having difficulty doing this cleanly in python.  Can anyone help?

I had a similar situation along with the requirement that the text to be 
scanned was being read in chunks.  After looking at the Python re module 
and various other regex packages, I eventually wrote my own multiple 
pattern scanning matcher.

However, since then I've discovered that the sre Python module has a 
Scanner class that does something similar.

Anyway, you can see my code at:
http://users.cs.cf.ac.uk/J.P.Giddy/python/Trespass/2.0.0/

Using it, your code could look like:

     # do this once
     import Trespass
     pattern = Trespass.Pattern()
     pattern.addRegExp(r'struct {', 1)
     pattern.addRegExp(r'typedef struct {', 2)
     pattern.addRegExp(r'something else', 3)

     # do this for each line
     match = pattern.match(line)
     if match:
         value = match.value()
         if value == 1:
             # struct
             do something
         elif value == 2:
             # typedef
             do something
         elif value == 3:
             # something else
             do something
     else:
         error



More information about the Python-list mailing list