首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式用于获取组内的匹配项

问正则表达式用于获取组内的匹配项
EN

Stack Overflow用户
提问于 2014-07-15 03:16:57
回答 1查看 76关注 0票数 4

我不知道下面的情况是否可行。假设我有以下文本:

代码语言:javascript
复制
<ul class="yes">
    <li><img src="whatever1"></li>
    <li><img src="whatever2"></li>
    <li><img src="whatever3"></li>
    <li><img src="whatever4"></li>
</ul>
<ul class="no">
    <li><img src="whatever5"></li>
    <li><img src="whatever6"></li>
    <li><img src="whatever7"></li>
    <li><img src="whatever8"></li>
</ul>

我希望将ul中的每个img的src都与类yes匹配。我希望一个正则表达式返回给我:

代码语言:javascript
复制
whatever1
whatever2
whatever3
whatever4

如何在一个正则表达式中加入两个这样的正则表达式?

代码语言:javascript
复制
<ul class="yes">(.+?)<\/ul>
<img src="(whatever.+?)">
EN

回答 1

Stack Overflow用户

发布于 2014-07-15 04:12:01

众所周知,Regex很难用于解析类似XML的东西。最好跳过这个想法,转而使用适当的超文本标记语言解析器,例如使用BeautifulSoup4

代码语言:javascript
复制
import bs4

html = """
<ul class="yes">
    <li><img src="whatever1"></li>
    <li><img src="whatever2"></li>
    <li><img src="whatever3"></li>
    <li><img src="whatever4"></li>
</ul>
<ul class="no">
    <li><img src="whatever5"></li>
    <li><img src="whatever6"></li>
    <li><img src="whatever7"></li>
    <li><img src="whatever8"></li>
</ul>
"""

soup = bs4.BeautifulSoup(html)

def match_imgs(tag):
    return tag.name == 'img' \
        and tag.parent.parent.name == 'ul' \
        and tag.parent.parent['class'] == ['yes']

imgs = soup.find_all(match_imgs)
print(imgs)

whatevers = [i['src'] for i in imgs]
print(whatevers)

收益率:

代码语言:javascript
复制
[<img src="whatever1"/>, <img src="whatever2"/>, <img src="whatever3"/>,
<img src="whatever4"/>]

[u'whatever1', u'whatever2', u'whatever3', u'whatever4']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24744115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档