我在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 的列表变长,这样不太方便并且变得非常笨拙.
一个hackish解决方案是将re.match和re.search包装在我自己的对象中,以保持状态.有没有人用过这个?您是否了解半标准实现(在大型框架或其他内容中)?
您还可以推荐哪些其他解决方法?或许,我只是在滥用模块,能够以更清洁的方式满足我的需求吗?
提前致谢
您可能希望这个模块实现您正在寻找的包装器.