re模块

import re

一、re模块方法

查找:
    1.re.findall():
         匹配所有 (输出结果为列表)  #所查找对象中的每一项都是列表中的一个元素

             re.findall(a,b,#c) 其中三个参数,一个默认值,两个必填

                        a 为正则表达式     b 为待匹配字符串   c 为flag
         例子:
             re.findall('\d+','sdasdf12asdad1515')     ['12', '1515']
             re.findall('\d','sdasdf12asdad1515')      ['1', '2', '1', '5', '1', '5']

    2.re.search():

         只匹配从左到右第一个,得到的不是直接结果,而是一个变量,变量通过group方法获得

         例子:
             ret = re.search('\d+','sdasdf12asdad1515')
             print(ret)           #返回是内存地址,一个正则匹配的结果
             print(ret.group())   #通过ret.group()获取真正结果
    3.re.match()

         从头开始匹配,相当于searc的正则表达式前中加一个^

         例子:
             ret = re.match('\d+','sdasdf12asdad1515')
                 #等同于ret = re.search('^\d+','sdasdf12asdad1515')

字符串处理的扩展:替换 切割

    1.re.split() 替换

        按照正则规则进行切割

        例子:
              s = 'ada|aasd|asfa|'
              print(s.split('|'))     按照'|'进行切割

              s = 'wanli212tangm122baocai25'
              ret = re.split('\d+',s)     按照正则规则'\d+'(数字)切割
              print(ret)


    2.re.sub() 替换

        按照正则规则进行替换 (谁,旧的,新的,替换次数)#参数

        例子:
             ret = re.sub("\d+",'H','wanli212tangm122baocai25',2) 用H替换s中的数字

    3.re.subn()

        一样,返回值有两个,组成元组,第二个为替换次数

re模块的进阶:时间与空间

    1.re.compile()  省时间

        编译一个正则表达式,用这个结果去search,match,finditer。。。节省时间(效率)

        例子:
             a = re.compile('\d+')
             ret1 = re.findall('wanli212tangm122baocai25')
             ret2 = re.search('wanli212tangm122baocai25')
             ret3 = re.finditer('wanli212tangm122baocai25')
             print(ret1,ret2,ret3)  意思就是不用每次再re.findall的参数中写正则表达式了


    2.re.finditer() 省空间

        返回一个迭代器,所有结果都在这个迭代其中,通过循环+group的形式取值

        例子:
            ret = re.finditer('\d+','wanli212tangm122baocai25')
            for i  in ret:
                print(i.group())           意思就是把找到结果的生成迭代器,为省内存

二、在python中使用正则表达式的特点与问题

分组问题:

        标签语言 '<a>.....</a>'  固定格式

            import re

    search  #分组取
            s = '<a>wahaha</a>'
            ret = re.search("<(\w+)>(wahaha)</(\w+)>")
            print(ret.group())      0为整个字符串
            print(ret.group(1))
            print(ret.group(2))
            print(ret.group(3))

    findall #优先显示
            为了findall 也可以顺利取到分组中的内容,有一个特殊的语法,优先显示分组中的内容
            ret = re.finditer(">(wahaha)<",s)     取消分组优先(?:正则表达式)
            print(ret)


    spilt   #显示切割部分
            ret = re.spilt('\d+',"aaaa11aaa22asd15asda2151asda")
            ret = re.spilt('(\d+)',"aaaa11aaa22asd15asda2151asda")     把数字也保留了下来

    分组命名 (?P<这个组的名字>正则表达式)

三.使用正则表达式的技巧

     思路: 有时要取一个值,可以取出全部,然后优先显示,来排除非要取的值
        例如:
             a = '11aaa22asd15asda2151asda4.6asfaf8.7'
                 需求: 匹配所有整数

             ret = re.findall('\d+)\.\d+|\d+',a)
             print(ret)
             ret.remove('')
             print(ret)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值