Using dictionary to hold regex patterns?

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Wed Nov 26 07:57:39 EST 2008


André a écrit :
(snip)
> you don't need to use pattern.items()...
> 
> Here is something I use (straight cut-and-paste):
> 
>     def parse_single_line(self, line):
>         '''Parses a given line to see if it match a known pattern'''
>         for name in self.patterns:
>             result = self.patterns[name].match(line)

FWIW, this is more expansive than iterating over (key, value) tuples 
using dict.items(), since you have one extra call to dict.__getitem__ 
per entry.

>             if result is not None:
>                 return name, result.groups()
>         return None, line
> 
> 
> where self.patterns is something like
> self.patterns={
> 'pattern1': re.compile(...),
> 'pattern2': re.compile(...)
> }
> 
> The one potential problem with the method as I wrote it is that
> sometimes a more generic pattern gets matched first whereas a more
> specific pattern may be desired.

As usual when order matters, the solution is to use a list of (name, 
whatever) tuples instead of a dict. You can still build a dict from this 
list when needed (the dict initializer accepts a list of (name, object) 
as argument).




More information about the Python-list mailing list