So I get some input in python that I need to parse using regexps.
At the moment I'm using something like this:
matchOK = re.compile(r'^OK\s+(\w+)\s+(\w+)$')
matchFailed = re.compile(r'^FAILED\s(\w+)$')
#.... a bunch more regexps
for l in big_input:
match = matchOK.search(l)
if match:
#do something with match
continue
match = matchFailed.search(l)
if match:
#do something with match
continue
#.... a bunch more of these
# Then some error handling if nothing matches
Now usually I love python because its nice and succinct. But this feels verbose. I'd expect to be able to do something like this:
for l in big_input:
if match = matchOK.search(l):
#do something with match
elif match = matchFailed.search(l):
#do something with match
#.... a bunch more of these
else
# error handling
Am I missing something, or is the first form as neat as I'm going to get?
class helper:
def __call__(self, match):
self.match= match
return bool(match)
h= helper()
for l in big_input:
if h(matchOK.search(l)):
# do something with h.match
elif h(matchFailed.search(l)):
# do something with h.match
... # a bunch more of these
else:
# error handling
Or matchers as class methods:
class matcher:
def __init__(self):
# compile matchers
self.ok= ...
self.failed= ...
self....= ...
def matchOK(self, l):
self.match= self.ok(l)
return bool(self.match)
def matchFailed(self, l):
self.match= self.failed(l)
return bool(self.match)
def match...(self, l):
...
m= matcher()
for l in big_input:
if m.matchOK(l):
# do something with m.match
elif m.matchFailed(l):
# do something with m.match
... # a bunch more of these
else:
# error handling
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With