Если вы просто используете это регулярное выражение снова и снова, вам не нужно его компилировать напрямую. http://docs.python.org/release/2.6.5/library/re.html#re.compile
Кэшированные версии самых последних шаблонов, переданных в re.match (), re.search () или re.compile (), кэшируются, поэтому программы, использующие только несколько регулярных выражений за раз, не должны беспокоиться составление регулярных выражений.
Однако я бы очень рекомендовал не выполнять нижеприведенные задания так, как вы. Попробуйте что-то вроде этого:
for line in file:
data = re.search('(\d+\.\d+)\|(-\d+\.\d+)\|(.*?)\|(.*?)\|(\d+:\d+\s+\w+)\sTO\s(.*?)',line)
groups = data.groups()
# do the magic...
MatchObject.groups()
возвращает кортеж всех групп в матче, причем группам, которые не участвуют в матче, присваивается значение, переданное groups()
(по умолчанию это значение равно None
).