Python 的 re 库运行 re.search 或者 re.match 的时间复杂度是大概是多少?

2020-04-24 20:28:42 +08:00
 zhoudaiyu
有个后台任务要与 2500 个左右正则做匹配,再加上查三次库要接近 40s 才能完成,感觉正则匹配非常慢。
1399 次点击
所在节点    问与答
5 条回复
dsg001
2020-04-24 20:35:56 +08:00
不预编译?
zhoudaiyu
2020-04-24 20:37:05 +08:00
@dsg001 没有做
Vegetable
2020-04-24 20:43:27 +08:00
python 的算法和其他语言没什么太大区别,但是好的正则和坏的正则有天壤之别。
复杂度是可以做到 O(N)的吧,这个我不太确定。
ClericPy
2020-04-24 20:52:53 +08:00
不提 NFA DFA 什么的... 你这复杂度明显还是看自己表达式写的问题吧, 有些语法复杂度确实格外大开销就大...

至于要做 2500 次正则, 这需求层面没有可以优化的了么, 如果是匹配关键词走 AC 自动机更快点; 如果是匹配 url 可以先按 host 做好 map; 其他需求也有其他的解耦

至于前面的说提前 compile, 之前倒是看到 Python 的 re 是有缓存的, 是否预编译差距不该这么大, 打上 log 看看是不是查库那边的 IO 开销
zhoudaiyu
2020-04-24 21:00:22 +08:00
@ClericPy 查库很快的 2s 就够

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX