如何在regexp中重复一个组?

2024-09-30 04:30:32 发布

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

我的python代码有问题。你知道吗

import re
page = '<ul id="talkList" class=aaaaaa <li class>First</li><li 
class>Second</li><li class>Third</li>...'
pattern = re.compile(r'<ul id="talkList".*?(<li.*?</li>)', re.S)
stories = re.findall(pattern, page)
for story in stories:
    print story

结果是:

<li class>First</li>

但我想结果是:

<li class>First</li>
<li class>Second</li>
<li class>Third</li>

我想匹配组(<li.*?</li>)0或无限次。你知道吗

我该怎么办?你知道吗

谢谢!你知道吗


Tags: 代码importreidpageliulclass
3条回答

你能试着用下面的regexp来代替吗。你知道吗

pattern = re.compile(r'(<li.*?</li>)', re.S)

这将如你所期望的那样起作用。你知道吗

Zero or More  =>  (<li.*?</li>){0,}

使用star运算符:

txt = 'abbabaa'
re.findall(r'(ab)*', txt)

输出:

['ab', '', 'ab', '', '', '']

小心

匹配0或更多将匹配空字符串,我不确定这是你需要的。你知道吗

建议

如果使用的是re.findall,则不需要在一个结果中匹配所有li元素,因为所有结果匹配都将从findall返回。你知道吗

首先使用re.search()捕获<ul>...</ul>块。 然后在生成的ul文本上使用re.findall()分隔每个<li></li>元素

建议二

使用lxmlbs4解析html对象,这比编写自己的正则表达式来查找html元素要简单。你知道吗

相关问题 更多 >

    热门问题