【发布时间】:2017-05-01 12:54:40
【问题描述】:
我正在尝试查找给定字符串的所有电子邮件
这是正则表达式:
r"([a-zA-Z0-9_.+-]+(?:\@|\[(?:(?:at|AT|@))\])+[a-zA-Z0-9-]+(?:\.|\[(?:[dtoDTO0\.])+\])[a-zA-Z0-9]+)"
字符串长度太长(~2L)。查找所有匹配的电子邮件需要很长时间。如果正则表达式花费的时间太长,我喜欢使用超时概念。有什么建议吗?
【问题讨论】:
-
一种选择可能是使用更好的正则表达式引擎,如 re2。对于超时,最好的方法可能是为正则表达式生成一个进程,然后在时间过长时终止该进程。
-
您能分享您的意见吗?
-
您可以使用
finditer代替findall。您输入的大小是多少? -
@Chris:公认的答案不如 OP 当前的解决方案复杂,所以我认为这不是一个好的欺骗目标。
-
如何使用更简单的正则表达式模式(可能是
emails_re = re.compile(r'\b[a-zA-Z0-9_\.]+@[a-zA-Z0-9.]+\b'))首先将文本缩小到几行,然后使用正则表达式过滤掉正确的电子邮件。也可以尝试使用finditer而不是findall。