多次匹配括号内的文本

2024-09-27 09:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样的文本:

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

我想使用一个regex来提取使用python的<li>/list标记之间的所有文本

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

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

<li>pizza</li>

有没有一种方法可以抓取<li>/list标记之间的所有项,这样我的输出看起来像:

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

Tags: and方法标记文本列表liullist
3条回答

为什么需要<p>标记

import re

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

m = re.findall('(<li>.+?</li>)',source)
print m

我想要你想要的

编辑

如果您只需要在<p>标记之间的文本,可以通过两个步骤完成:

import re

source = '<p>Joe likes <ul><li>pizza</li>, <li>burgers</li>, and <li>fries</li></ul></p> and also <li>coke</li>'

ss = re.findall('<p>(.+?)</p>',source)

for s in ss:
    m = re.findall('(<li>.+?</li>)',s)
    print m

这应该起作用:

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>

假设您已经提取了示例字符串,您可以执行以下操作:

import re
s = "<p>Joe likes <ul><li>pizza</li>, <li>burgers</li>, and <li>fries</li></ul></p>"
re.findall("<li>.+?</li>", s)

Output:
['<li>pizza</li>', '<li>burgers</li>', '<li>fries</li>']

相关问题 更多 >

    热门问题