python - Python regex - 匹配多次
问题描述
我想匹配一个字符特定的次数。例如,我想匹配一个 HTML 字符串中的作者姓名,如下所示:
base>"author's name"</span>
以下正则表达式匹配“base>”和“/span>”之间的任何字符,并仅返回作者姓名:
base>\s*(.*?)(?=\s*<\/span>)
但是,HTML 文件包含 50 个这样的实例,上面的正则表达式返回所有 50 个匹配项。我将如何修改它以便只返回匹配的前 10 个实例?
解决方案
可以创建一个正则表达式来捕获该正则表达式的前十个实例,方法是将其连接在由 分隔的自身之后.*?
。然后,您可以使用前十个捕获组来提取作者:
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,但会更容易响应不断变化的需求。
推荐阅读
- wordpress - 如何访问古腾堡块中的高级自定义字段值?
- java - slf4j/log4j 使用标记进行日志记录
- javascript - React 表中的嵌套对象数组
- android - 在我的三星 Galaxy S10+ 上通过 IntelliJ/Android SDK 调试 Android 应用程序导致“安装 APK 时出错”
- ruby - 如何创建在子级之间不共享状态的类变量
- mysql - ERROR 3680 (HY000): 无法创建模式目录“test”(错误号:13 - 权限被拒绝)
- django - “'int' 对象没有属性 'save'” 从 views.py 更新模型
- python - 有没有更快的方法来获取 MNIST 数据集的本地二进制模式?
- android - 未询问存储权限
- ssl - ListenAndServerTLS 不断失败并出现错误:在证书输入中找不到任何 PEM 数据