我发现 Python 中最大的烦恼之一是无法re
模块来保存其状态,而无需在匹配对象中显式执行此操作。通常,人们需要解析行,如果它们符合某个正则表达式,则通过相同的正则表达式从中取出值。我想写这样的代码:
if re.match('foo (\w+) bar (\d+)', line):
# do stuff with .group(1) and .group(2)
elif re.match('baz whoo_(\d+)', line):
# do stuff with .group(1)
# etc.
但不幸的是,不可能获得先前调用的匹配对象re.match
,所以写成这样:
m = re.match('foo (\w+) bar (\d+)', line)
if m:
# do stuff with m.group(1) and m.group(2)
else:
m = re.match('baz whoo_(\d+)', line)
if m:
# do stuff with m.group(1)
这是相当不方便的,并且变得非常笨拙,因为列表elif
s 变长。
一个黑客解决方案是将 re.match 和 re.search 包装在我自己的对象中,这些对象将状态保存在某处。有人用过这个吗?您是否知道半标准实现(在大型框架等中)?
您还可以推荐哪些其他解决方法?
或者也许,我只是滥用该模块并且可以以更干净的方式实现我的需求?
提前致谢
你可能会喜欢该模块 http://code.activestate.com/recipes/456151/它实现了您正在寻找的包装器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)