Одним из самых больших неприятностей, которые я нахожу в Python, является неспособность модуля re
сохранить его состояние, явно не делая его в объекте match. Часто нужно разбирать строки и, если они соответствуют определенному регулярному выражению, извлекают значения из них одним и тем же регулярным выражением. Я хотел бы написать код следующим образом:
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
увеличивается дольше.
Хакерским решением было бы обернуть re.match и re.search в мои собственные объекты, которые где-то сохраняют состояние. Кто-нибудь использовал это? Знаете ли вы о полустандартных реализациях (в больших рамках или что-то еще)?
Какие еще обходные пути вы можете порекомендовать? Или, может быть, я просто злоупотребляю модулем и могу достичь моих потребностей более чистым способом?
Заранее спасибо