有工具可以把正则简化(如下面的r2
简单成r1
)的吗?或者re.compile
会简化正则表达式(结果看起来不会)吗?
# -*- coding: utf-8 -*-
import itertools
import re
string = "".join(map(str, range(1000000)))
r1 = r"[13579]{3}"
r2 = rf'{"|".join(map("".join, itertools.product("13579", repeat=3)))}'
r1 = re.compile(r1)
r2 = re.compile(r2)
match1 = re.findall(r1, string)
match2 = re.findall(r2, string)
assert sorted(match1) == sorted(match2)
结果:
In [78]: %timeit re.findall(r1, string)
167 ms ± 520 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [79]: %timeit re.findall(r2, string)
1.08 s ± 2.69 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.