我不是在问如何对表进行正则表达式,而是为什么会出现速度差异
我有一个10gb的CSV文件,我想找到这样的特定值。
原始CSV表。
id |价值|日期| num
1 |“ 12first” | “虚拟val + 18-10-20” | “ 92dummy”
对此。
id |价值|日期| num
1 |“第一” | “ 18-10-20” | 92
我同时使用了切片和正则表达式方法的pandas库,发现 与切片桌子相比,大熊猫的正则表达式确实很慢。 因此,正则表达式不是所有搜索优化的灵丹妙药吗?
答案 0 :(得分:0)
执行正则表达式搜索时,首先会编译一个有限状态机,然后在逐个字符地查看字符串以查看匹配项时对其进行遍历。如果找到部分匹配项,然后发现使该匹配项无效的内容,则必须备份并重新开始。当然,如果您的正则表达式很简单,则可能不会有任何回溯,但它仍在考虑每个字符的最小值。
另一方面,切片到一点并进行切割。不在乎要进行切割的点之间的字符值是多少,它只是这样做。这就是为什么在处理周期非常昂贵时,固定宽度数据格式基本上是唯一的方法。
答案 1 :(得分:0)
切片是直接的方法:遍历数据,找到一个分隔符,将所有内容放到列表中,然后继续到最后。
另一方面,如果正则表达式包含通配符或重复符,则它们会变得非常复杂。然后,匹配者必须检查通配符组的许多可能组合(如果适用)。它们可能效率很低。不久前,通配符和大量空格的不幸组合使堆栈溢出很快就屈膝了。