Regular expression help

Russell Blau russblau at hotmail.com
Fri Jul 18 10:04:29 EDT 2008


<nclbndk759 at googlemail.com> wrote in message 
news:187a9118-97fb-41fc-87f2-d24c4d7522fb at w1g2000prk.googlegroups.com...
> I am new to Python, with a background in scientific computing. I'm
> trying to write a script that will take a file with lines like
>
> c afrac=.7 mmom=0 sev=-9.56646 erep=0 etot=-11.020107 emad=-3.597647
> 3pv=0
>
> extract the values of afrac and etot and plot them.
...

> What is being stored in energy is '<_sre.SRE_Match object at
> 0x2a955e4ed0>', not '-11.020107'. Why?

because the re.match() method returns a match object, as documented at 
http://www.python.org/doc/current/lib/match-objects.html

But this looks like a problem where regular expressions are overkill. 
Assuming all your lines are formatted as in the example above (every value 
you are interested in contains an equals sign and is surrounded by spaces), 
you could do this:

values = {}
for expression in line.split(" "):
    if "=" in expression:
        name, val = expression.split("=")
        values[name] = val

I'd wager that this will run a fair bit faster than any regex-based 
solution.  Then you just use values['afrac'] and values['etot'] when you 
need them.

And when you get to be a really hard-core Pythonista, you could write the 
whole routine above in one line, but this seems clearer.  ;-)

Russ






More information about the Python-list mailing list