4

我在 Python 中进行了几个正则表达式替换

  \w\s+\w  

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

4

1 回答 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 毫秒的差异。

于 2012-11-30T19:44:19.960 回答