我正在制作一个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"
会使正则表达式几乎立即匹配。
在文本字符串的第一行中添加更多文本会使Regex匹配花费的时间越来越长。字符串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}))')
使程序运行正常,而与字符串长度无关。
我了解我的Regex有缺陷,但是我不明白为什么它会导致我的程序花很长时间运行
答案 0 :(得分:0)
错误可能是由+
之后的(.*)
引起的。将正则表达式更改为emailRegex = re.compile(r'((.+)@(.+)\.(.){2,4})')
可使程序按预期运行。谢谢您的帮助!