Если единственный известный вам инструмент - молоток, каждая проблема выглядит как гвоздь.
Регулярные выражения являются мощным молотком, но иногда не лучшим инструментом для решения поставленной задачи. На самом деле регулярными выражениями часто злоупотребляют, я чувствую дрожь в спине каждый раз, когда кто-то просит меня проверить сложные регулярные выражения от другого программиста (часто я не могу понять мои после нескольких недель).
С другой стороны, нотация EBNF (расширенная форма Бэкуса-Наура) намного легче понять и поддерживать.
from simpleparse.parser import Parser
grammar = r"""
<space> := [ \t]
<newline> := '\n'
<identifier> := [A-Za-z_],[A-Za-z0-9z_]*
match := newline,identifier,space+,'WORD'
<junk> := newline*,identifier,space+,-'WORD',(identifier/space)*
data := (match/junk)*
"""
parser = Parser(grammar, 'data')
data = 'some junk\nvariable1 WORD\nvariable2 some ' +\
'junk\nvariable3 WORD\nvariable4 some other ' +\
'junk\nvariable5 WORD'
(start, matches, stop) = parser.parse(data)
print [ start for name, start, stop, other in matches ]
Будет напечатано:
[9, 44, 85]