【发布时间】:2014-11-25 12:25:13
【问题描述】:
当我编译正则表达式并将其分配给变量或将其添加到列表时,我怀疑在 Python 2.x 和 3.x 上会出现不同的行为。
import re
z = re.compile('a')
print(z)
sn-p 以上打印在 2.x 上
<_sre.SRE_Pattern object at 0x7ff839e57030>
在 3.x 上
re.compile('a')
第一个看起来像正则表达式已编译并准备好在我需要时随时使用(这是我想要的),但第二个仍然显示re.compile。
这是否意味着正则表达式在我需要时即时编译,更糟糕的是每次我引用z 并执行z.match('a') 之类的操作时都重新编译?还是所描述的 Python 3 行为只是装饰性的,它还在后台维护了一个编译副本?
我的意思是,我(静态地)在源文件的开头编译我的正则表达式,这样可以节省一些我在循环中重复引用它们的时间,但如果这没有发生,那就不好了。
【问题讨论】:
-
你不清楚,没有区别
-
@Hackaholic,我认为你是对的,因为即使在 P3 上, print(z.__class__) 和 print(z.pattern) 都显示了预期的内容。因此,该对象已经创建。但是,我仍然不确定我是否真的喜欢 P3 对 SRE_Pattern 对象进行字符串化的方式。如果我们有一个包含 're.compile(\'a\')' 的字符串 var 怎么办?他们会打印完全一样的。也许是因为我习惯了P2方式。
标签: python regex python-3.x