首页 > 解决方案 > 多次匹配括号内的文本

问题描述

假设我有这样的文字:

<p>Joe likes <ul><li>pizza</li>, <li>burgers</li>, and <li>fries</li></ul></p>

我想使用单个正则表达式来<li>使用 python 提取 /list 标记之间的所有文本。

regexp = <p>.+?(<li>.+?</li>).+?</p>

<li>这仅返回由/list 标签包围的列表中的第一项:

<li>pizza</li>

有没有办法让我抓住<li>/list 标签之间的所有项目,所以我的输出看起来像:

<li>pizza</li><li>burgers</li><li>fries</li>

标签: pythonregex

解决方案


这应该有效:

import re

source = '<p>Joe likes <ul><li>pizza</li>, <li>burgers</li>, and <li>fries</li></ul></p>'
res = ''.join(re.findall('<li>[^<]*</li>', source))
# <li>pizza</li><li>burgers</li><li>fries</li>

推荐阅读