Looking for a regular expression for this...

malahal at us.ibm.com malahal at us.ibm.com
Fri Jul 28 20:52:00 EDT 2006


OK, I tried this one. I am actually trying to parse dhcpd.conf file.

def get_filename(self):
    p = "^[ \t]*filename[ \t]+(\S+).*?host[ \t]+%s\s*$" % self.host
    pat = re.compile(p, re.MULTILINE | re.DOTALL)
    mo = pat.search(self.confdata)
    if mo:
        return mo.group(1)
    else:
        return ""

self.host is the hostname and self.confdata is the string. It actually
matches the first filename that appears before the host entry. I want
the last one that appears before the host entry. I tried '.*?' assuming
it works, but now I know why it doesn't work!

Since I am only interested in a particular host's filename, I could
easily parse line by line. That is how it is done now, but would like to
know if there any RE that does the trick!

Thanks, Malahal.

faulkner [faulkner612 at comcast.net] wrote:
> idk, most regexes look surprisingly like undergrowth.
> 
> malahal, why don't you parse s into a dict? read each couple of lines
> into a key-value pair.
> 
> 
> John Machin wrote:
> > malahal at us.ibm.com wrote:
> > > Hi,
> > >     My string is a multi line string that contains "filename
> > >     <filename>\n" and "host <host>\n" entries among other things.
> > >
> > >     For example: s = """ filename X
> > >                     host hostname1
> > >                     blah...
> > >                     host hostname2
> > >                     blah...
> > >                     filename Y
> > >                     host hostname3
> > >                     """
> > > Given a host name, I would like to get its filename (The closest
> > > filename reading backwards from the host line). I could read each line
> > > until I hit the host name, but I am looking for an RE that will do job.
> >
> > Looking for? REs don't lurk in the undergrowth waiting to be found. You
> > will need to write one (unless some misguided person spoon-feeds you).
> > What have you tried so far?
> >
> > > The answer should be "Y" for host hostname3 and "X" for either host
> > > hostname1 or hostname2.
> > > 
> > > Thanks in advance.
> > > 
> > > --Malahal.
> 
> -- 
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list