Python正则表达式速度 - 贪婪模式 vs. 非贪婪模式

4
我将在Python中进行几个正则表达式替换,类似于以下内容:
  \w\s+\w  

在许多大型文档中搜索。显然,如果我使用非贪婪的正则表达式(使用),它不会改变匹配的内容(因为\w!= \s),但是它会使代码运行更快吗? 换句话说,使用非贪婪的正则表达式,Python是从第一个匹配字符开始工作,而不是从文档末尾返回到该字符,还是这是一种简单的观点?


5
测量它。很可能不是,但要测量。 - Emil Ivanov
1个回答

2

这是你所暗示的模式吗?

In [15]: s = 'some text   with \tspaces  between'

In [16]: timeit re.sub(r'(\w)(\s+)(\w)', '\\1 \\3', s)
10000 loops, best of 3: 30.5 us per loop

In [17]: timeit re.sub(r'(\w)(\s+?)(\w)', '\\1 \\3', s)
10000 loops, best of 3: 24.9 us per loop

似乎这里的区别很小。使用非贪婪方式,只有5微秒。

使用一个包含500个词的lorem-ipsum,在每个单词之间添加多个混合空格,我得到了8毫秒的差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接