|
2
|
| colin-zhou GirishB · 技术社区 · 7 年前 |
|
|
1
1
通过“改变顺序”你实际上在使用
根据您正在使用的Python解释器的具体实现,这可能会导致一些开销(例如方法查找)。
换句话说,这与Python的工作方式有关,而与regex或
输出
|
|
2
0
让我们说一,二。。。是正则表达式: 让我们重写这些部分:
我将为所有模式创建一个正则表达式:
要支持其中包含|的正则表达式,必须将表达式括起来:
(当然,这也适用于标准单词,由于|部分的原因,仍然值得使用regex) 现在这是一个伪装的循环,每个术语都被硬编码:
可以简单地重写为
在性能方面: 正则表达式是在开始时编译的,因此它尽可能快 没有循环或粘贴的表达式,“或”部分是由regex引擎完成的,这在大多数情况下是一些编译的代码:在纯python中是做不到的。 匹配和拆分在一次操作中完成 最后一个问题是,regex引擎在内部搜索循环中的所有表达式,这使其成为一个O(n)算法。为了加快速度,您必须预测哪个模式最频繁,并将其放在第一位(我的假设是正则表达式是“不相交的”,这意味着一个文本不能由多个匹配,否则最长的必须在较短的之前) |
|
|
3
0
我花了一些时间调查
这表明,如果我们直接执行re.findall(compiled_pattern,string),它将触发对_compile(pattern,flags)的额外调用,在该函数中,它将执行一些检查并在缓存字典中搜索该模式。但是,如果我们打电话
|
|
O.rka · 如何为re.findall…Python 2.7添加附加条件? 13 年前 |