Я попытаюсь ответить на этот вопрос, даже не зная, что вы на самом деле там делаете. Так что этот ответ может помочь вам, а может и нет.
Прежде всего, 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()
Глядя на ваш код, ваши регулярные выражения также кажутся взаимоисключающими — или, по крайней мере, вы всегда используете только первое совпадение и пропускаете остальные. В этом случае вы должны убедиться, что вы заказываете свои проверки так, чтобы наиболее распространенные проверки выполнялись в первую очередь. Таким образом, вы избежите запуска слишком большого количества выражений, которые все равно не будут совпадать. Кроме того, постарайтесь расположить их так, чтобы более сложные выражения выполнялись реже.
Наконец, вы собираете результат матча в отдельные переменные varN
. На данный момент я задаюсь вопросом, что именно вы там делаете, поскольку после всех ваших проверок if у вас нет четкого способа выяснить, что было результатом и какую переменную использовать. На этом этапе может иметь смысл просто собрать его в одну переменную или переместить конкретную логику в тело условия. Но сложно сказать по тому количеству информации, что вы дали.
person
poke
schedule
05.02.2017
n
вещи, используйте список. - person jonrsharpe   schedule 05.02.2017n
скомпилированных регулярных выражений с отдельными именами? - person jonrsharpe   schedule 05.02.2017elif
s). - person poke   schedule 05.02.2017