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