哪个更有效?长字符串或列表上的正则表达式

时间:2010-11-27 16:45:11

标签: python regex

我正在使用正则表达式寻找匹配项。在长字符串上使用它或者将相同的字符串分解为列表是否更有效?

例如

mystring = "asdfl;jkasdfj;ldj;lj;dlskjfasdfjkl; ;lj ;lf ak;lkjf al;kjdlkjsdl;fkja;dlkjf a;lsdf"

OR

mylist = ["asdfl;jkasdfj;ldj;lj;dlskjfasdfjkl;",";lj", ";lf ak;lkjf","al;kjdlkjsdl;fkja;dlkjf a;lsdf"] 

5 个答案:

答案 0 :(得分:4)

由于编写re模块的方式,更简单,更有效的方法是在字符串上使用正则表达式。这不是更快,但它更有效率,因为它更容易编码,更容易维护,并且更好地利用Python的电池。

re针对长字符串而不是列表进行了优化。如果你在字符串列表中使用正则表达式,你最终会对re中的函数进行大量调用。

基本规则,除非必要,否则不要进行优化,因为现有的做法太慢了。

答案 1 :(得分:2)

根据正则表达式匹配的theoretical computational complexity,它最多需要O(n * m),其中n是输入的长度,m是正则表达式的大小。这表明分解输入没有任何优势,因为你要么添加n个片段以获得相同的结果。

答案 2 :(得分:1)

你应该做些什么,而不是随意听取SO的猜测,实际上是衡量差异。

使用优秀的timeit模块执行此操作。 Documentation。示例代码:

import timeit
from mymodule import list_func, string_func

print 'list version:', timeit.timeit(list_func)
print 'string version:', timeit.timeit(string_func)

答案 3 :(得分:0)

对于您使用长字符串发布的示例更好。该列表似乎不包含任何逻辑,这将定义搜索条件,因此您需要匹配/搜索整个列表。

答案 4 :(得分:0)

通过剖析可以最好地回答诸如“哪个更有效”等问题。因此,对两种情况进行分析,看哪种情况更快。那就是说,小差异真的不重要吗?但Rafe是对的。 re和字符串相处得更好。