python学习之re篇

         re 库                                    #正则表达式

        常用参数:
            pattern:正则表达式的字符串或原生字符串表示,    string:待匹配的字符串,    flags:正则表达式使用时的标记,
            maxsplit:最大分割数,剩余部分作为一个整体输出    repl:替换字符串的字符串,    count:匹配的最大替换次数

        flags  :
            re.I(大写I)                                #忽略正则表达式的大小写
            re.M                                        #从给定的正则表达式的每一行开始匹配
            re.S                                         #正则表达式中的.操作符能够匹配所有字符,除了换行符

        正则表达式常用的操作符:
        { m } ------------------------------------------------------------------------------#扩展一个字符 m 次         列如:ab{ 2 }c  == abbc
        { m , n } ------------------------------------------------------------------#扩展一个字符 m 至 n 次     列如:ab{ 1, 2 }c == abc,abbc
        ^ -----------------------------------------------------------------#匹配字符串开头        列如:^abc 表示abc 且在一个字符串开头
        $ ---------------------------------------------------------------#匹配字符串结尾        列如:abc$表示abc且在一个字符串的结尾
        ( ) -----------------------------------------------------------------#分组标记 内部只能用 | 操作符    列如:(abc|def) 表示 abc ,def
        \d ----------------------------------------------------------------------------------------------------#数字             等价于 1 -- 9
        \w ---------------------------------------------------------------------------------------------------#单词字符            
        .  -----------------------------------------------------------------------------------------------------#任何单个字符
        [ ] ---------------------------------------------------------------------#字符集            给单个字符给出取值范围     列如:[abc] ==a , b, c
        [^]--------------------------------------------------#非字符集            给单个字符给出排除范围    列如:[^abc] == 非 a,非b ,非c
        * ----------------------------------------------------#扩展            给前一个字符0次或无限扩展    列如:  abc* == ab,abc,abcc,abcccc
        +---------------------------------------------------#扩展            给前一个字符1次或无限扩展    列如:  abc+ ==abc,abcc,abcccc
        ?-------------------------------------------------------#扩展            给前一个字符0次或一次扩展    列如:  abc? == ab,abc
        |------------------------------------------------------#左右任意一个                    列如:  abc | def == abc,def

        re.compile(pattern,flags=0)-----------------#将正则表达式的字符串形式编译成正则表达式对象        regex = re.compile()  随后          使用以下函数 regex.findall()等等
        re.search(pattern,string,flags=0)-------#Search函数        在一个字符串中搜索匹配正则表达式的第一个位置返回match对象   
        re.match(pattern,string,flags=0)------------#Match函数        从一个字符串的开始位置起匹配正则表达式,返回match对象    
        re.findall(pattern,string,flags=0)------------------#搜索字符串以列表类型返回全部能匹配的子串
        re.split(pattern,string,maxspilt=0,flags=0)----------------------#将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
        re.finditer(pattern,string,flags=0-----------------------#搜索字符串,返回一个匹配结果的迭代类型,每个迭代类型是match对象
        re.sub(pattern,repl,string,count=0,flags=0)-------------#在一个字符串中替换所有正则表达式的字串,返回替换后的字符串
        append(object)--------------------------------------------------------------------------------------#将元素加到列表中

        match对象的方法
        <>.group(0)------------------------------------------------------------------------------------------#获取匹配的字符串
        <>.start()---------------------------------------------------------------------------------------------#匹配字符串在原始字符串的开始位置
        <>.end()----------------------------------------------------------------------------------------------#匹配字符串在原始字符串的结束位置
        <>.span()---------------------------------------------------------------------------------------------#返回.start()或者.end()
        

        例如:

            >>>parttern=re.compile(r'https://pan.baidu.com/s/.{23}',re.S)

            >>> re.findall(parttern,r.text)

#查找一个网页中的百度链接网盘,据观察,百度网盘/s/后有23个字母或数字,通过re匹配即可。由于我也是边学边记下来,所以或有些地方有错误,希望大家评价。
 

代码简单实例:re-requests   (更新版)

import re
import requests
def compare(text):    
    info = []
    pattern = re.compile(r'<li><a href=(.*?) target="_blank"><img src=.*? /> <span class="m_name">(.*?)</span></a></li>',re.S)
    mass = re.findall(pattern, text)
    info.append(mass)
    pattern=re.compile(r'<li><span><font color="red">.*?</font></span><div class="title"><a href=(.*?) target="_blank">(.*?)</a></div></li>', re.S)
    mass = re.findall(pattern, text)
    info.append(mass)

    print(info)


def getHtml():
    try:
        print("输入网址:")
        url='http://www.920hdhd.com/?tz'
        Bs={'user-agent':'firefox/124.451'}
        r=requests.get(url,headers=Bs)
        print(r.status_code)
        r.encoding=r.apparent_encoding
        return r.text
    except:
        print("html not done")

if __name__ == '__main__':
    text=getHtml()
    commass=compare(text)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值