regular expression: perl ==> python
Fredrik Lundh
fredrik at pythonware.com
Thu Dec 23 05:56:49 EST 2004
Nick Craig-Wood wrote:
> I take your point. However I don't find the below very readable -
> making 5 small regexps into 1 big one, plus a game of count the
> brackets doesn't strike me as a huge win...
if you're doing that a lot, you might wish to create a helper function.
the undocumented sre.Scanner provides a ready-made mechanism for this
kind of RE matching; see
http://aspn.activestate.com/ASPN/Mail/Message/python-dev/1614344
for some discussion.
here's (a slight variation of) the code example they're talking about:
def s_ident(scanner, token): return token
def s_operator(scanner, token): return "op%s" % token
def s_float(scanner, token): return float(token)
def s_int(scanner, token): return int(token)
scanner = sre.Scanner([
(r"[a-zA-Z_]\w*", s_ident),
(r"\d+\.\d*", s_float),
(r"\d+", s_int),
(r"=|\+|-|\*|/", s_operator),
(r"\s+", None),
])
>>> print scanner.scan("sum = 3*foo + 312.50 + bar")
(['sum', 'op=', 3, 'op*', 'foo', 'op+', 312.5, 'op+', 'bar'], '')
</F>
More information about the Python-list
mailing list