Я работал над выделением определенного фрагмента информации из файла длиной в несколько тысяч строк кода. Мой оригинальный регулярное выражение было это:Почему существует огромное различие в скорости между этими регулярными выражениями?
re.findall('#+\s+Athstats\s+Radio\s+(\d+).+?(\d+)\s+nodes\s+allocated\(nodealloc\)\s+ (\d+)\s+nodes\s+deleted\(nodefree\)', source_string, re.DOTALL)
После того как я изменил его на них:
re.findall('#+\s*Athstats\s*Radio\s*(\d).*?#+.*?(\d+)\s*nodes\s*allocated\(nodealloc\)', source_string, re.DOTALL)
re.findall('#+\s*Athstats\s*Radio\s*(\d).*?#+.*?(\d+)\s*nodes\s*deleted\(nodefree\)', source_string, re.DOTALL)
вещи замедлились к ползанию ... она принимает вопросы секунд вместо микро/нано секунд! Почему это? Я использую Python 2.7, просматривая текстовый файл длиной в несколько тысяч строк.
Неограниченные совпадения на неограниченных наборах символов опасны. Я бы настоятельно советовал не делать их вообще, тем более, что информация, участвующая в каком-либо одном матче, должна на практике быть достаточно близкой. –
Информация, которую он просматривает, может быть любым персонажем, поэтому неограниченный характер имеет смысл. Отдельные фрагменты информации расположены примерно на расстоянии 10-50 строк. – Nqobile
Пожалуйста, не могли бы вы представить репрезентативную выборку ваших входных данных? (точнее, с началом и концом строк в частности). –