Using dictionary to hold regex patterns?

Arnaud Delobelle arnodel at googlemail.com
Sun Nov 23 12:55:48 EST 2008


Gilles Ganault <nospam at nospam.com> writes:

> Hello
>
> After downloading a web page, I need to search for several patterns,
> and if found, extract information and put them into a database.
>
> To avoid a bunch of "if m", I figured maybe I could use a dictionary
> to hold the patterns, and loop through it:
>
> ======
> pattern = {}
> pattern["pattern1"] = ">.+?</td>.+?>(.+?)</td>"

  pattern["pattern1"] = re.compile(">.+?</td>.+?>(.+?)</td>")

> for key,value in pattern.items():
> 	response = ">whatever</td>.+?>Blababla</td>"
>
> 	#AttributeError: 'str' object has no attribute 'search'
> 	m = key.search(response)

        m = value.search(response)

> 	if m:
> 		print key + "#" + value
> ======
>
> Is there a way to use a dictionary this way, or am I stuck with
> copy/pasting blocks of "if m:"?

But there is no reason why you should use a dictionary; just use a list
of key-value pairs:

patterns = [
    ("pattern1", re.compile(">.+?</td>.+?>(.+?)</td>"),
    ("pattern2", re.compile("something else"),
    ....
    ]

for name, pattern in patterns:
    ...

-- 
Arnaud




More information about the Python-list mailing list