首页 > 解决方案 > Python regex - 匹配多次

问题描述

我想匹配一个字符特定的次数。例如,我想匹配一个 HTML 字符串中的作者姓名,如下所示:

base>"author's name"</span>

以下正则表达式匹配“base>”和“/span>”之间的任何字符,并仅返回作者姓名:

base>\s*(.*?)(?=\s*<\/span>)

但是,HTML 文件包含 50 个这样的实例,上面的正则表达式返回所有 50 个匹配项。我将如何修改它以便只返回匹配的前 10 个实例?

标签: pythonregexpython-3.x

解决方案


可以创建一个正则表达式来捕获该正则表达式的前十个实例,方法是将其连接在由 分隔的自身之后.*?。然后,您可以使用前十个捕获组来提取作者:

base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>).*?base>\s*(.*?)(?=\s*<\/span>)

然而,这不是您通常想要做的,因为它使得更改您搜索的作者数量变得相对困难。查找所有捕获并仅使用前几个可能会占用更多 CPU,但会更容易响应不断变化的需求。


推荐阅读