是什么让这个正则表达式非常慢?

时间:2017-08-03 13:18:25

标签: python regex

我正在开发一个应用程序,用户可以使用正则表达式从文本中搜索和提取信息。一位用户插入了以下正则表达式:([^\s]*( ?)){3}\n(他们在表达式的末尾添加了一个空行)。这可以翻译成Python:

import re

regexp = re.compile(r'([^\s]*( ?)){3}\n')

regexp用于从由空格分隔的一组URL中提取URL。当您运行以下命令时,评估搜索所花费的时间大约是我机器上的半秒钟。

regexp.search(u'https://www.example.com/data/products/64973s3d.jpg https://www.example.com/data/products/j4e0ls.jpg https://www.example.com/data/products/sfd69es6d9.jpg https://www.example.com/data/products/6sd9fw.jpg https://www.example.com/data/products/64973s3d.jpg https://www.example.com/data/products/j4e0ls.jpg https://www.example.com/data/products/64973s3d.jpg https://www.example.com/data/products/j4e0ls.jpg https://www.example.com/data/products/64973s3d.jpg https://www.example.com/data/products/j4e0ls.jpg https://www.example.com/data/products/64973s3d.jpg https://www.example.com/data/products/j4e0ls.jpg')

在正则表达式(([^\s]*( ?)){3})末尾删除新行时,搜索速度会快得多。

为什么会这样?是否可以防止此行为,以便用户不能通过使用类似(慢)正则表达式来减慢整个应用程序的速度?

0 个答案:

没有答案