Python正则表达速度 - 贪婪与非贪婪

时间:2012-11-30 19:08:56

标签: python regex performance non-greedy

我在Python中按照

的方式进行了几次正则表达式替换
  \w\s+\w  

许多大型文件。显然,如果我使正则表达式非贪婪(使用?),它将不会更改匹配的内容(如\w!= \s),但它会使代码运行得更快? 换句话说,使用非贪婪的正则表达式,Python从第一个匹配的字符开始,而不是从文档的末尾返回到该字符,或者这是一个天真的观点?

1 个答案:

答案 0 :(得分: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毫秒的差异。

相关问题