我在 Python 中进行了几个正则表达式替换
\w\s+\w
在许多大文件上。显然,如果我使正则表达式不贪婪(使用 a ?
),它不会改变匹配的内容(如\w
!= \s
),但它会使代码运行得更快吗?换句话说,对于非贪婪的正则表达式,Python 是否从匹配的第一个字符开始工作,而不是从文档末尾返回到该字符,或者这是一个幼稚的观点?
我在 Python 中进行了几个正则表达式替换
\w\s+\w
在许多大文件上。显然,如果我使正则表达式不贪婪(使用 a ?
),它不会改变匹配的内容(如\w
!= \s
),但它会使代码运行得更快吗?换句话说,对于非贪婪的正则表达式,Python 是否从匹配的第一个字符开始工作,而不是从文档末尾返回到该字符,或者这是一个幼稚的观点?
这是你暗示的模式吗?
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 毫秒的差异。