Python——正则

简介

正则:用模式匹配字符串

 

元字符下的匹配字符和量词组成

 

匹配字符

         单字符串

         [ 任意字符组合 ]:匹配中括号内其中之一

         ():分组。在python内,用(?P<键值>)标记分组内匹配的字符串

         \d:任意数字

         .:除换行符外任意字符

         [\s\S]:任意字符

 

量词:

         {n,m}:匹配至少n次,至多m次。正则默认贪婪模式,向m次靠近

         {n}:匹配固定n次

         *:{0,m}

         +:{1,m}

        

贪婪模式:

         正则默认开启贪婪模式,在量词后加?可取消

        

Python内:

         (?P<键值>[\s\S]*?),用分组标记需要提取的数据

 

使用:

  匹配思路:

    举例子,我要匹配下面这张图片里的 漫画名、漫画作者、漫画图片链接、漫画分类

 

 

 

1. 开头匹配包裹所有数据的标签

2. 通过[\s\S]*?跳到需要数据标签开头。

3. 用分组提取该数据

4.写上此标签结尾

5.重复第二步到需要的数据都被分组包裹

 

<div class="banner_detail_form">
<div class="cover">
 <img src="https://img.acgzone.net/images/cover/202006/1592986867QvvH0yVfTECZ7SEi.jpg" alt="端脑(全彩版)">
</div>
<div class="info">
<h1>端脑(全彩版)</h1>
<p class="subtitle">作者:有妖气漫画</p>
<p class="tip">
<span class="block">状态:<span>已完结</span></span>
<span class="block ticai">地区:<a href="/booklist/?area=1" target="_blank">国漫</a></span>
<span class="block">更新时间:2021-10-08</span>
<span class="block">点击:851</span>
</p>
<p class="tip" style="margin-top:10px;">
<span class="block">标签:
<a href="/booklist/?tag=推理" target="_blank">推理</a>
<a href="/booklist/?tag=烧脑" target="_blank">烧脑</a>
<a href="/booklist/?tag=科技" target="_blank">科技</a>
<a href="/booklist/?tag=游戏" target="_blank">游戏</a>
<a href="/booklist/?tag=" target="_blank"></a>
</span>
</p>
<p class="content" style="position: relative;overflow : hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;">
谁能想到,一封神秘来信,竟让自己的女友人间蒸发?面对未知危险的【端脑】游戏世界,如此弱小的他,将对自 </p>
<div class="bottom" style="width: 850px;bottom: 30px;">
<a href="javascript:void(0);" id="addfavor" class="btn-1 btn_collection"><i class="icon icon-fav2"></i>收藏</a>
<a href="/chapter/575710" class="btn-2">开始阅读</a>
</div>
</div>
<script>
                $('#addfavor').click(function () {
                    var val = $(this).attr('data-val');
                    $.post({
                        url:`/addfavor`,
                        data:{'book_id' : 26027, 'val' : val },
                        success: function (res) {
                            if (res.err == 1){
                                ShowDialog(res.msg);
                            } else {
                                if (res.isfavor == 1){ //表示收藏了,将控件状态改为已收藏
                                    $('a.btn-1').html('<i class="icon icon-fav2-full"></i>已收藏</a>').attr('data-val',1).addClass('active');
                                    ShowDialog('收藏成功');
                                } else { //更改为未收藏
                                    $('a.btn-1').html('<i class="icon icon-fav2"></i>收藏</a>').attr('data-val',0).removeClass('active');
                                    ShowDialog('取消收藏');
                                }
                            }
                        },
                    })
                })
            </script>
<div style="clear: both;"></div>
</div>

 

# 超链接 https://zhwsxx.com/book/26027
<div class="banner_detail_form">[\s\S]*?<h1>(?P<cName>[\s\S]*?)</h1>[\s\S]*?<p class="subtitle">作者:(?P<cAuthor>[\s\S]*?)</p>[\s\S]*?<span class="block">点击:(?P<cClick>[\s\S]*?)</span>

 

思路二

  根据最近标识符进行开头

 

 

问题1:正则本身就是匹配,匹配中写分组再匹配有什么意义?

  标记数据取值、在python中括号标注的匹配用于提取该分组数据

 

问题2:在正则思路中。为什么分组取得数据后,不直接跳到下一个需要取数据的开头。

[\s\S]*?分组标记的数据是在范围内取得,有范围必定有上下限。

没有下限会和后面跳过代码重合,导致数据范围变大

posted @ 2021-10-08 21:51  remix_alone  阅读(118)  评论(0)    收藏  举报