python3中使用正则表达式的一些高级操作(二)

      前面我们介绍了一些使用正则表达式的基础操作,但当我们需要创建的表达式比较复杂时,有没有一个好的方法帮助我们描述这些复杂的字符串模式呢?下面我们学习一下如何灵活的创建一些复杂的正则表达式吧!

     1.匹配次数设置

        (1) *匹配0次或多次  :c(learn)*c表示匹配的文本为 cc、clearnc、clearnlearnc..........................

        (2)+匹配1次或多次 :c(learn)+c表示匹配的文本为 clearnc、clearnlearnc..........................

        (3)?匹配0次或1次:c(learn)?c表示匹配的文本为cc、clearnc

        (4){}匹配特定次数   :\d\d\d 可以表示为 \d{3};(\d\d\d)可以表示为(\d{3})

                                                \d、\d\d、\d\d\d 三个合起来可以表示为(\d){1,3}表示匹配1-3次

    2.贪心和非贪心匹配

       举个例子,如果匹配模式为(c){3,5},,则如果文本中有ccccc,那么是会返回ccc、cccc还是ccccc呢?

python的正则表达式默认的是贪心匹配,即匹配最长的字符串,如果想转换成非贪心匹配,则需要在花括号后面加一个问号{}?

假设需要匹配的文本为‘我的编码为ccccc’, 若正则表达式为 (c){3,5},则输出结果为ccccc

                                                                  若正则表达式为 (c){3,5}? 则输出结果为ccc

  3.逻辑运算符

      管道符 | :表示希望匹配许多表达式中的一个,如 r'cc|dd'表示匹配cc或者dd

  4.建立自己的字符分类

      有时候你想匹配一组字符,但缩写的字符分类\d \s \w太过宽泛,比如你想匹配aeoiu这几个元音字符,那么你可以用方括号[]建立自己的字符分类:

     a = re.compile(r'[aeiouAEIOU]')

     a.findall('aabbccddiieeooll')    =======> ['a', 'a', 'i', 'i', 'e', 'e', 'o', 'o']

 

    5.通配符

       前面我们讲到,\d  \s \w基本代表了所有类别的字符,但其实这三中表示形式可以用通配符代替,通配符就是一个句点. ,但需要注意的是,通配符.不包含换行符,如果要包含换行符,则需要在flag参数中设置为re.dotall

  6.其他高级操作

    (1)插入字符^:表明匹配必须发生在被查找文本的开始处,如构建正则表达式re.compile(r'^hello'),表示匹配的文本要以hello开始

   (2)美元字符$:表明匹配必须发生在被查找文本的结束处,如构建正则表达式re.compile(r'\d$'),表示匹配的文本要以0-9的数字结束


        以上都是构建复杂的正则表达式的一些方法,其实pattern对象不仅能查找到匹配的字符串,还可以对查找到的字符串进行替换,需要用到re.sub()函数,由于这个函数用起来可简单可复杂所以就不在本篇赘述,可以参考链接python re模块(正则表达式) sub()函数详解

       

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值