• pyhton之re模块-正则表达式


    1.什么是正则

        正则就 是一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串

        正则就是用来去一个大的字符串中匹配出符合规则的子字符串

    2.为什么要用正则

        1.用户注册

        2.爬虫程序

    print(re.findall('w','helllo 123 _*/_-='))    #匹配数字字符下划线

    print(re.findall('W','helllo 123 _*/_-=')) #非数字字母下划线

    import re
    print(re.findall('w','heello 123 _*/-='))  #w数字字母下划线
    print(re.findall('W','heello 123 _*/-=')) #W非数字字母下划线
    
    print(re.findall('s','heello 123 _*/-=')) #s空白字符
    print(re.findall('S','heello 123 _*/-='))# S非空白符
    
    print(re.findall('d','heello 123 _*/-='))#d匹配数字
    print(re.findall('D','heello 123 _*/-=')) #D非数字
    
    
    print(re.findall('
    ','heello 
    123 
    _*/-='))#
    匹配换行符
    print(re.findall('	','heello 	123 _*/-='))  #	匹配tab 
    print(re.findall('^e','heello 123 _*/-='))   #^e开头
    print(re.findall('e$','heello 123 _*/-='))   #e$结尾
    print(re.findall('[*-+/]','heello 123 _*/-='))   #匹配括号里面字符
    
    # .任意
    print(re.findall('a.c','abc a1c aac asd aaaaac a*c a+c abasd'))
    
    #匹配
       re.DOTALL
    print(re.findall('a.c','abc a1c aac a
    c asd aaaaac a*c a+c abasd',re.DOTALL))
    
    #匹配[a-z]任意的
    print(re.findall('a[a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
    
    #匹配-+*/
    print(re.findall('a[-+*/]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
    
    #[]括号反选^
    print(re.findall('a[^a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
    
    print(re.findall('a[a-z][a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
    
    
    
    # *: 必须与其他字符连用,代表左侧的字符出现0次或者无穷次
    print(re.findall('ab*','a ab abbb abbbb a1bbbb a-123'))
    #['a', 'ab', 'abbb', 'abbbb', 'a', 'a']
    print(re.findall('ab{0,}','a ab abbb abbbb a1bbbb a-123'))
    
    
    # ?: 必须与其他字符连用,代表左侧的字符出现0次或者1次
    print(re.findall('ab?','a ab abbb abbbb a1bbbb a-123'))
    #['a', 'ab', 'ab', 'ab', 'a', 'a']
    print(re.findall('ab{0,1}','a ab abbb abbbb a1bbbb a-123'))
    
    
    #+: 必须与其他字符连用,代表左侧的字符出现1次或者无穷次
    print(re.findall('ab+','a ab abbb abbbb a1bbbb a-123'))
    #['ab', 'abbb', 'abbbb']
    # print(re.findall('ab{1,}','a ab abbb abbbb a1bbbb a -123'))
    
    
    # {n,m}: 必须与其他字符连用
    print(re.findall('ab{1,3}','a ab abbb abbbb a1bbbb a-123'))
                                                     # ab{1,3}
    # ['ab','abbb','abbb']
    
    
    #贪婪  取开头到结尾所有中间的字符
    print(re.findall('a.*c', 'ab123adfc1134124123adasfc123123'))
    
    
    
    #非贪婪  取带有开头和结尾的字符段
    print(re.findall('a.*?c','ab123adfc1134124123adasfc123123'))
    
    #转义符号
    print(re.findall(r'a\c','ac'))
    print(re.findall('a\\c','ac'))
    
    #只取分组里面的
    print(re.findall('expression="(.*?)"','expression="1+2+3/4 *5"egon="beautiful"'))
    
    #非贪婪匹配原则
    print(re.findall('href="(.*?)"','<p>段落</p><a href="https://www.sb.com ">点我啊</a><h1>标题</h1><a href="https://www.sb.com ">点我啊</a>'))
    
    print(re.findall('href="(?:.*?)"','<a href="http://www.baidu.com">点击</a>'))#['href="http://www.baidu.com"']
    
    
    #只取分组
    print(re.findall('ab+','ababab123'))
    print(re.findall('(ab)+123','ababab123'))    #只取()里面的
    print(re.findall('(?:ab)ab','ababab123'))    #?:显示全部内容
    #
    
    #取出数字
    print(re.findall('d.*d*','asdfasdf123as1.13dfa12adsf1asdf3'))
    
    res = '321nhio24y28hoi90.873fsd287dsf'
    print(re.findall('d..*d*',res))
    
    
    #?:显示全部内容 并
    print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
    
    print(re.findall('e','alex make love'))
    #指定取一个
    print(re.search('e','alex make love').group())  #取一个
    #指定切分
    print(re.split('[ab]','abcd'))   #切分  a切分一次  b切分一次 最后只有cd了
    
    
    #替换
    print('===>',re.sub('a','A','alex make love'))   #指定替换
    
    print('===>',re.sub('a','A','alex make love',1)) #替换一次
    
    
    print('==>',re.subn('a','A','alex make love'))
    # ==> ('Alex mAke love', 2)          返回替换了两次
    
    
    
    
    
    print(re.findall(r'-?d+.?d*',"1-12*(60+(-40.35/5)-(-4*3))"))
    
    
    
    
    a=re.compile('d{2}')    #条件分离
    print(a.search('abc123eeee').group())   #调用条件
    print(a.findall('abc123eeee'))
    
    
    print(re.search('(d)+','123').group()) #group的作用是将所有组拼接到一起显示出来
    print(re.findall('(d)+','123')) #findall结果是组内的结果,且是最后一个组的结果
    
    
    
  • 相关阅读:
    sqlite错误 Abort due to constraint violation column id is not unique id没开启自动增长
    字符串转为日期类型
    XPTable 一行添加数据 如果想添加多行 可以使用for循环
    在逮捕异常的时候 可以获取e.MESSAGE里面的信息 然后判断是什么异常
    C# 加载图片image (C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法
    计算两个时间的前后 时间戳
    用C#语言写的多线程演示程序:两个线程,可以开始,可以暂停,可以恢复,可以清除。
    sqlite插入日期时候 出现18991230 0:00:00
    datagridview绑定dataset的时候 需要这一句
    WinForm 子线程修改主线程(UI线程)Control 【Z】
  • 原文地址:https://www.cnblogs.com/Marcki/p/10111952.html
Copyright © 2020-2023  润新知