为什么Python中存在sre和re模块?

Art*_*are 6 python regex

我一直认为,当我看到人们提到sre模块时,这是一个错字,他们实际上意味着re.

今天,我不小心输入import sre了翻译,并对它起作用感到惊讶.我决定再深入了解sre模块的help(sre)内容,以及它所做的一切与它完全相同re.

为什么两个模块都存在?哪个先来?为什么第二个被创造?是否已经弃用和/或删除了(它已经在Python 3中消失了吗?我在这台计算机上没有Python 3解释器来检查.)

Ter*_*ryA 5

是的,它已被弃用。当你这样做时help(sre),你一定看到了这一行:

DESCRIPTION
    This file is only retained for backwards compatibility.
    It will be removed in the future.  sre was moved to re in version 2.5.
Run Code Online (Sandbox Code Playgroud)

因此它用于为 Python <2.5 设计的代码,但现在已被re.

此外,它被删除了:

# Python 3
>>> import sre
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'sre'
Run Code Online (Sandbox Code Playgroud)


Sil*_*own 4

reregexp在 Python 1.5 中引入(使用 Philip Hazel 的 PCRE 代码),比 Python 0.9.0(在 Python 1.5 中删除)和regexPython 0.9.5(在 Python 2.0 中没有记录,后来被删除)更好。

Python 2.0 添加了一个新的、与 Unicode 兼容的实现,sre由 SecretLabs 的 Fredrik Lundh 调用。以前的版本被保留为一个名为的模块pre(Python 2.0 文档说这是因为sre当时新的“可能会遇到某些模式的堆栈限制”),并且该re模块可以设置为指向其中之一:通常sre但发行版可以设置如果他们愿意的话pre。因此,理论上,如果您想确保Python 2.0 中获得 Unicode 兼容的实现,您必须显式地这样做import sre,但我不知道有哪个发行版import re与此不同。

然后 Python 2.4 被删除pre,因为堆栈限制已在 中得到解决sre,您可以导入 或resre它将是等效的。

然后 Python 2.5 被弃用sre(现在只是 的别名re),Python 3.0 删除了它。