Help: Creating condensed expressions

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Fri Mar 24 23:38:04 CET 2006


David Hirschfield a écrit :
> Here's the problem: Given a list of item names like:
> 
> apple1
> apple2
> apple3_SD
> formA
> formB
> formC
> kla_MM
> kla_MB
> kca_MM
> 
> which is a subset of a much larger list of items,
> is there an efficient algorithm to create condensed forms that match 
> those items, and only those items? Such as:
> 
> apple[12]
> apple3_SD
> form[ABC]
> kla_M[MB]
> kca_MM



> The condensed expression syntax only has [...] and * as operators. [...] 
> matches a set of individual characters, * matches any string.
> I'd be satisfied with a solution that only uses the [...] syntax, since 
> I don't think it's possible to use * without potentially matching items 
> not explicitly in the given list.
> 
> I'm not sure what this condensed expression syntax is called (looks a 
> bit like shell name expansion syntax),

Looks like a very restricted subset of regular expressions.

> and I'm not even sure there is an 
> efficient way to do what I'm asking. Any ideas would be appreciated.


import re

lines = """
apple1
apple2
apple3_SD
formA
formB
formC
kla_MM
kla_MB
kca_MM
""".strip().split()

patterns = [
     r'apple[12]',
     r'apple3_SD',
     r'form[ABC]',
     r'kla_M[MB]',
     r'kca_MM',
     ]

for pat in patterns:
     for line in lines:
         m = re.match(pat, line)
         print "%s match %s : %s" % (pat, line, m and "Yes" or 'No')


HTH



More information about the Python-list mailing list