Я собираюсь попытаться ответить на этот вопрос, не зная, что вы на самом деле там делает. Таким образом, этот ответ может помочь вам, а может и нет.
Прежде всего, то, что re.compile
делает, предварительно скомпилирует регулярное выражение, поэтому вы можете использовать его позже и не нужно его компилировать каждый раз, когда вы его используете. Это в первую очередь полезно, когда у вас есть регулярное выражение, которое используется несколько раз в вашей программе. Но если выражение используется только несколько раз, то на самом деле не так много пользы для его составления.
Итак, вы должны спросить себя, как часто выполняется код, который пытается сопоставить все эти выражения. Это один раз во время выполнения скрипта? Затем вы можете сделать свой код проще, вставив выражения. Поскольку вы используете совпадения для каждой строки в файле, предварительная компиляция, вероятно, имеет смысл здесь.
Но только потому, что вы предварительно скомпилировали выражение, это не означает, что вы должны быть неаккуратными и слишком часто совпадать с одним и тем же выражением. Посмотрите на этот код:
if N1.match(line):
var1 = N1.match(line).group(x).strip()
Предполагая, что есть совпадение, это будет работать N1.match()
дважды. Это накладные расходы, которых следует избегать, поскольку соответствующие выражения могут быть относительно дорогими (в зависимости от выражения), даже если выражение уже предварительно скомпилировано.
Вместо этого, просто соответствовать его один раз, а затем повторно использовать результат:
n1_match = N1.match(line)
if n1_match:
var1 = n1_match.group(x).strip()
Глядя на ваш код, ваши регулярные выражения также, как представляется, mutally исключающее или, по крайней мере, вы только когда-либо использовать первый матч и пропустите оставшиеся. В этом случае вы должны убедиться, что вы заказываете свои чеки , чтобы сначала выполнялись наиболее распространенные проверки. Таким образом, вы избегаете запуска слишком большого количества выражений, которые не будут совпадать. Кроме того, попробуйте упорядочить их, чтобы более сложные выражения выполнялись реже.
И наконец, вы получаете результат совпадения в виде отдельных переменных varN
. На данный момент я задаюсь вопросом, что именно вы там делаете, поскольку после всех проверок вы не имеете четкого способа выяснить, что такое результат и какую переменную использовать. В этот момент может возникнуть смысл просто собрать его в одной переменной или переместить определенную логику в телах условий. Но с объемом информации, которую вы дали, сложно сказать.
В общем, если вы хотите 'n' вещи, используйте * список *. – jonrsharpe
извлеченные данные будут храниться в списках и словарях, но зачем использовать список перед извлечением? –
... потому что вы хотите что-то более короткое и более эффективное, чем определение 'n' скомпилированных регулярных выражений с отдельными именами? – jonrsharpe