正则表达式获取组内匹配

标签 regex preg-match

我不知道以下是否可能。
假设我有以下文本:

<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 匹配。
我想要一个正则表达式返回我:
whatever1
whatever2
whatever3
whatever4

如何在一个正则表达式中加入两个这样的正则表达式?
<ul class="yes">(.+?)<\/ul>
<img src="(whatever.+?)">

最佳答案

众所周知,正则表达式很难用于解析类似 XML 的东西。最好跳过这个想法并使用适当的 HTML 解析器来代替,例如使用 BeautifulSoup4 :

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)

产量:
[<img src="whatever1"/>, <img src="whatever2"/>, <img src="whatever3"/>,
<img src="whatever4"/>]

[u'whatever1', u'whatever2', u'whatever3', u'whatever4']

关于正则表达式获取组内匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744115/

相关文章:

Javascript 正则表达式和 getElementByID

c# - 使用正则表达式获取部分匹配值

C# Regex 按分隔符分割

php - preg_split 混合 HTML 和 PHP 标记,引号和注释除外

javascript - 仅向搜索引擎访问者展示 Google AdSense 广告

regex - preg_match() : Compilation failed: invalid range in character class at offset 15

正则表达式搜索忽略字符串中的单词

r - 以任何顺序(提取/分离/匹配)组

PHP preg_match() 返回最后一次匹配的位置

javascript - 如何提取 HTML 代码中的字体系列?