Я делаю программу Python, которая сопоставляет все электронные письма в строке и возвращает их пользователю:
emailRegex = re.compile(r'((.*)+@(.*)+\.(.*){3})')
text = "John Smith, Vice Provost for Undergraduate Studies\n123-456-7890\njohn.smith@email.edu"
emailList = emailRegex.findall(text)
clipOut = []
for tup in emailList:
clipOut.append(tup[0])
print(clipOut)
Я запускал эту программу более 9 минут без какого-либо вывода
Как ни странно, изменение текстовой строки на "John\n123-456-7890\njohn.smith@email.edu"
приводит к тому, что регулярное выражение почти мгновенно соответствует. Строка John Smith, Vice Provost\n123-456-7890\njohn.smith@email.edu
запускается на моем ноутбуке чуть более 10 секунд. Уменьшение количества символов перед электронным письмом увеличивает скорость сопоставления. Изменение используемых символов не увеличивает скорость сопоставления. Однако удаление всех новых строк заставляет программу работать с ожидаемой скоростью, независимо от количества символов перед электронной почтой.
Наконец, изменение регулярного выражения на:
emailRegex = re.compile(r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,4}))')
Обеспечивает нормальную работу программы, независимо от длины строки.
Я понимаю, что мое регулярное выражение было некорректным, но я не понимаю, почему из-за этого моя программа так долго запускается