我正在开发一个应用程序,用户可以使用正则表达式从文本中搜索和提取信息。一位用户插入了以下正则表达式:([^\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}
)末尾删除新行时,搜索速度会快得多。
为什么会这样?是否可以防止此行为,以便用户不能通过使用类似(慢)正则表达式来减慢整个应用程序的速度?