• python正则re模块


    今日内容:

    知识点一:正则
     什么是正则:
      就是用一系列具有特殊含义的字符组成一套规则,改规则用来描述具有某一特征的字符串
      正则就是用来在一个大的字符串中取出符合规则的小字符串
      
     为什么用正则:
      1.用户注册
      2.爬虫程序
      
     如何用:
      re.findall
     
    re.findall模块:

    w取字母、数字、下划线
    print(re.findall('w','yangzz:age_18 '))
    W取非字母、数字、下划线
    print(re.findall('W','yangzz:age_18 '))

    s匹配任意空白字符串,等价于[ f]  t是一个table键
    print(re.findall('s',' yangzz age_18  '))

    S匹配任意非空字符
    print(re.findall('S', ' yangzz age_18  '))

    d匹配任意数字
    print(re.findall('d', ' yangzz age_18  '))
    D匹配任意非数字
    print(re.findall('D', ' yangzz age_18  '))

    匹配一个换行符
    print(re.findall(' ', ' yangzz age_18 aaa bb b '))

    匹配一个制表符
    print(re.findall(' ', ' yangzz age_18 aaa bb b '))


    ^取字符串的开头 (没有返回空列表,从开头第一个匹配)
    print(re.findall('^yang', 'yangzz age_18  yang aaa bb b ')) #['yang']

    $匹配字符串末尾
    print(re.findall('b$', 'yangzz age_18  yang aaa bb b')) #['b']

    . 匹配任意字符,除了换行符
    print(re.findall('.', 'yangzz age_18 *%& yang aaa bb b'))

    例如2 a.g其实是三位字符, .可以是任意非换行符(后面加re.DOTALL中间也可以取到 )
    print(re.findall('a.g', 'yangzz age_18 ang *%& yang aaa bb b')) #['ang', 'ang']
    print(re.findall('a.g', 'ya ngzz age_18 a g *%& yang aaa bb b',re.DOTALL)) #['a g', 'ang']

    [a,e,b]匹配[]limian
    print(re.findall('[ ]', 'yangzz age_18  yang aaa bb b'))#[' ', ' ']
    print(re.findall('[a,e,b]', 'yangzz age_18  yangzhizong aaa bb b')) #['a', 'a', 'e', 'a', 'a', 'a', 'a', 'b', 'b', 'b']

    print(re.findall('y[a-z]n', 'yangzz age_18 yan y1n yang aaa bb b'))

    取不再括号中的字符
    print(re.findall('[^z,a]', 'yangzz'))


    *代表左边的字符出现0次或者无穷次(条件一定要有a,b可有可无)
    print(re.findall('an*', 'yangzhizong mawenjie annd'))  #['an', 'a']


    ?代表左边的字符出现0次或者1次(条件一定要有a,b有的话只取一个就行)
    print(re.findall('an?', 'yangzhizong mawenjie annd')) #['an', 'a', 'an']


    +代表左边的字符出现1次或者无穷次(条件一定要有a,b至少有一个)
    print(re.findall('an+', 'yangzhizong mawenjie annd')) #['an', 'ann']

    #匹配所有包含小数在内的数字
    print(re.findall('d+.?d*',"asdfasdf123as1.13dfa12adsf1asdf3")) #['123', '1.13', '12', '1', '3']

    思路:d 找数字 +表示左边数字出现1次或者无穷次 ???


    .*默认为贪婪匹配 (默认取从头到尾取值)
    print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b']

    .*?为非贪婪匹配:推荐使用
    print(re.findall('a.*?b','a1b22222222b')) #['123', '1.13', '12', '1', '3']

    {n,m}固定取值,碰到有的 取1个 和2个在一块儿 分开组合
    {0,2} 0开始的默认也会把其他打印但是现实为空
    print(re.findall('a{0,2}', 'yangzzage18yangaaabbb')) #['', 'a', '', '', '', '', 'a', '', '', '', '', '', '', 'a', '', '', 'aa', 'a', '', '', '', '']
    print(re.findall('ab{1,}','abbb'))  #['abbb']

    print(re.findall('a[1*-]b','a1b a*b a-b'))


    [+-*/] 括号内有加减乘除时,减号要放在左边或者右边 放中间的话只能前面加 [+-*/]代表将-转译为不同字符
    print(re.findall('a[+-*/]b','a12ba a++b a*b a-+b'))


    re.search()模块
    只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法
    得到匹配的字符串,如果字符串没有匹配,则返回None。

    print(re.findall('e','alex make love'))
    print(re.search('e','alex make love')) #<_sre.SRE_Match object; span=(2, 3), match='e'>
    print(re.search('e','alex make love').group())  # e

    match从开头进行查找,没有的话返回None
    print(re.match('e','alex make love'))


    split分割 模块
    ['', '', 'cd'],先按'a'分割得到''和'bcd',再对''和'bcd'分别按'b'分割
    print(re.split('[ab]','abcd'))


    替换re.sub()模块
    1.不加参数默认替换所有
    print(re.sub('a','A','abcdeaedaer',1)) #Abcdeaedaer

    替换subn(输出可以显示总共替换的个数)
    print(re.subn('a','A','abcdeaedaer'))

    re.complie()模块
    可以定制编译,方便直接调用
    obj=re.compile('d{2}')
    print(obj.search('ab123ee').group()) #12
    print(obj.findall('ab123ee')) #['12']

  • 相关阅读:
    pylint
    Cygwin安装与配置
    Spring的配置文件
    网络传输测试软件
    MINA快速传输文件
    Jar包下载
    shutdown彻底关闭tomcat,以及多线程关闭
    Git使用
    例说数学学习中的四基
    求等差数列前n项和S_n的最值
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/9210854.html
Copyright © 2020-2023  润新知