zoukankan      html  css  js  c++  java
  • python-day20--正则表达式与re模块

    1.通过re模块可以做一些关于正则的相关操作

    2.正则表达式:做字符串匹配的规则

    1)字符组:在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[ ]表示

      [0-9][a-f][A-F]   ,可以匹配数字,大小写形式的a~f

    2)元字符:

    3)量词

    4)贪婪匹配与惰性匹配

    贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

    几个常用的非贪婪匹配Pattern:   pattern控制的是前面紧挨着的一个字符

    *? 重复任意次,但尽可能少重复

    +? 重复1次或更多次,但尽可能少重复

    ?? 重复0次或1次,但尽可能少重复

    {n,m}? 重复n到m次,但尽可能少重复

    {n,}? 重复n次以上,但尽可能少重复

    .*?的用法:

    . 是任意字符
    * 是取 0 至 无限长度
    ? 是非贪婪模式。
    何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
    .*?x
    
    就是取前面任意长度的字符,直到一个x出现
    

    5)分组()与或 |  [ ^ ]

    身份证号码:    ^([1-9]d{16}[0-9x]|[1-9]d{14})$

    3.re模块内的常用方法:

     1 import re
     2 
     3 ret = re.findall('a', 'eva egon yuan')  # 返回所有满足匹配条件的结果,放在列表里
     4 print(ret) #结果 : ['a', 'a']
     5 
     6 ret = re.search('a', 'eva egon yuan').group()
     7 print(ret) #结果 : 'a'
     8 # 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
     9 # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
    10 
    11 ret = re.match('a', 'abc').group()  # 同search,不过尽在字符串开始处进行匹配
    12 print(ret)
    13 #结果 : 'a'
    14 
    15 ret = re.split('[ab]', 'abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
    16 print(ret)  # ['', '', 'cd']
    17 
    18 ret = re.sub('d', 'H', 'eva3egon4yuan4', 1)#将数字替换成'H',参数1表示只替换1个
    19 print(ret) #evaHegon4yuan4
    20 
    21 ret = re.subn('d', 'H', 'eva3egon4yuan4')#将数字替换成'H',返回元组(替换的结果,替换了多少次)
    22 print(ret)
    23 
    24 obj = re.compile('d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
    25 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
    26 print(ret.group())  #结果 : 123
    27 
    28 import re
    29 ret = re.finditer('d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
    30 print(ret)  # <callable_iterator object at 0x10195f940>
    31 print(next(ret).group())  #查看第一个结果
    32 print(next(ret).group())  #查看第二个结果
    33 print([i.group() for i in ret])  #查看剩余的左右结果
    View Code

    4.findall优先级处理:

    import re
    
    ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
    print(ret)  # ['oldboy']     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
    
    ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
    print(ret)  # ['www.oldboy.com']
    View Code

    5.split的优先级查询

    ret=re.split("d+","eva3egon4yuan")
    print(ret) #结果 : ['eva', 'egon', 'yuan']
    
    ret=re.split("(d+)","eva3egon4yuan")
    print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan']
    
    #在匹配部分加上()之后所切出的结果是不同的,
    #没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
    #这个在某些需要保留匹配部分的使用过程是非常重要的。
  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/7300148.html
Copyright © 2011-2022 走看看