【问题标题】:Python Regex FindAll Taking Too Long [duplicate]Python Regex FindAll 耗时过长 [重复]
【发布时间】: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

标签: python regex


【解决方案1】:

旁注:您知道,不能将“cmets”添加为新用户让我很沮丧。我不认为我的回复值得完整的回答,但它可能会有所帮助。

回复: 关于这一点,我注意到一个人的操作系统经常在这里出现问题。在我的每个 Windows 系统上,我都注意到 Python 中的文本处理非常慢。在我的 CentOS 和 Kali 实现中,它是立竿见影的。您介意提一下您使用的操作系统吗?

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 2018-10-09
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2013-02-26
    • 2011-12-28
    相关资源
    最近更新 更多