求解一个python正则表达式问题
迷茫
迷茫 2017-04-18 09:27:46
[Python讨论组]
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
迷茫

title_node=soup.find('i',class_="time-icon").find("em")
你这个是 bs4 的 css 选择器,不是 正则。

<i class="time-icon"></i><em>5课时 39分钟</em>

你仔细看标签元素的层次关系, iem 是平级的,
em 并不是 i 的子元素。
所以,你的 find 方法是找不到 em 的。


给个正则的例子:

html='''<html>
<p class="timeandicon">
            <p class="cf">
                <dl>
                    <dd class="mar-b8"><i class="time-icon"></i><em>5课时 39分钟</em>
                    </dd>
                    <dd class="zhongji">
                        
                    <i class="xinhao-icon2"></i><em>中级</em>
                    </dd>
                    
                </dl>
                <em class="learn-number">578人学习</em>
            </p>
</p>
<p class="timeandicon">
            <p class="cf">
                <dl>
                    <dd class="mar-b8"><i class="time-icon"></i><em>14课时 37分钟</em>
                    </dd>
                    <dd class="zhongji">
                        
                    <i class="xinhao-icon2"></i><em>中级</em>
                    </dd>
                    
                </dl>
                <em class="learn-number">50228人学习</em>
            </p>
</p>

<html>'''

import re

ptn = re.compile(r'<p[^>]*?class="cf".*?<dl>.*?'
                 r'<em>([^<]*?)</em>.*?' # 课时
                 r'<em>([^<]*?)</em>.*?' # 级别
                 r'</dl>.*?</p>'
                 ,re.S)
mch = ptn.findall(html)
keys = ('课时', '级别')
info = [dict(zip(keys, data)) for data in mch]
print(info)

结果:

[{'级别': '中级', '课时': '5课时 39分钟'}, {'级别': '中级', '课时': '14课时 37分钟'}]
天蓬老师

你的文本里是 timeandicon

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号