• day 17 re模块


    RE模块

    import re

    对一个大篇幅的字符串,按照你的规则找出想要的字符串

    # 单个字符匹配
    import re
    # w 与 W   #字母数字下划线,  非
    # print(re.findall('w', '太白jx 12*() _'))  # ['太', '白', 'j', 'x', '1', '2', '_']
    # print(re.findall('W', '太白jx 12*() _'))  # [' ', '*', '(', ')', ' ']
    
    
    # s 与S      space   非space
    # print(re.findall('s','太白barry*(_ 	 
    '))  # [' ', '	', ' ', '
    ']
    # print(re.findall('S','太白barry*(_ 	 
    '))  # ['太', '白', 'b', 'a', 'r', 'r', 'y', '*', '(', '_']
    
    
    # d 与 D     数字  非数字
    # print(re.findall('d','1234567890 alex *(_'))  # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    # print(re.findall('D','1234567890 alex *(_'))  # [' ', 'a', 'l', 'e', 'x', ' ', '*', '(', '_']
    
    # A 与 ^   行首
    # print(re.findall('Ahel','hello 太白金星 -_- 666'))  # ['hel']
    # print(re.findall('^hel','hello 太白金星 -_- 666'))  # ['hel']
    
    
    #  与 $  行尾
    # print(re.findall('666','hello 太白金星 *-_-* 
    666'))  # ['666']
    # print(re.findall('666','hello 太白金星 *-_-* 
    666'))  # []
    # print(re.findall('666$','hello 太白金星 *-_-* 
    666'))  # ['666']
    
    #
    # print(re.findall('
    ','hello 
     太白金星 	*-_-*	 
    666'))  # ['
    ', '
    ']
    # print(re.findall('	','hello 
     太白金星 	*-_-*	 
    666'))  # ['	', '	']
    重复匹配 : [. ? * + {m,n} .* .*?]
    . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
    ? 匹配0个或者1个左边的字符,非贪婪方式
    * 匹配0个或者多个左边的字符
    + 匹配一个或者多个左边的字符
    {m,n} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
    
    
    .*   匹配任意字符任意个数,贪婪模式
    
    
    .*? 匹配任意字符任意个数,非贪婪模式
    .匹配任意字符
    print(re.findall('a.b','babb'))
    print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a
    b'))
    print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a
    b',re.DOTALL))
    print(re.findall('a.bb','abb abb aaab'))
    
    ? 匹配0个或者1个由左边字符定义的片段
    print(re.findall('a?b','abbzab abb aab'))  # [ab b ab ab b ab]
    print(re.findall('a?b','ab'))  # [ab]
    
    * 匹配0个或者多个左边字符表达式
    print(re.findall('a*b','b ab aaaaaab abbbbbbb'))
    ['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'b', 'b', 'b', 'b']
    
    + 匹配1个或者多个左边字符表达式
    print(re.findall('a+b','b ab aaaaaab abb'))  # ['ab', 'aaaaaab', 'ab']
    
    {m,n}  匹配m个至n个左边字符表达式
    print(re.findall('a{1,3}b','aaab ab aab abbb aaz aabb'))
    
    .* 贪婪匹配 从头到尾.
    print(re.findall('a.*b','aab ab aaaaab a!!!@#$bz')) # [aab aaaaab a!!!@#$b]
    
    # .*?  非贪婪匹配 从头到尾.
    print(re.findall('a.*?b','aab ab aaaaab a!!!@#$bz')) #

    [ ]

    []
    print(re.findall('a[abc]b','aab abb acb'))
    print(re.findall('a[0-9]b','a1b a2b a3b  acb ayb'))
    print(re.findall('a[a-z]b','a1b a2b a3b  acb ayb adb'))
    print(re.findall('a[A-Z]b','a1b a2b a3b  aAb aDb aYb'))
    print(re.findall('a[a-zA-Z]b','aab aAb aWb aqb a1b'))  # 大小写字母
    print(re.findall('a[A-z]b','aab aAb aWb aqb a1b'))
    print(re.findall('a[0-9][0-9]b','a1b a2b a29b a56b a456b'))
    print(re.findall('a[-+*/]b','a+b a-b a*b a/b a6b')) 单纯的想表示- 一定要放在最前面
    () 制定一个规则,将满足规则的结果匹配出来
    print(re.findall('.*?_sb','wusir_sb alex_sb 日天_sb'))    #['wusir_sb', ' alex_sb', ' 日天_sb']
    print(re.findall('(.*?)_sb','wusir_sb alex_sb 日天_sb'))  # ['wusir', ' alex', ' 日天']
    print(re.findall('company|companies','Too many companies have gone bankrupt, and the next one is my company'))
    print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
    search 只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
    
    
    print(re.search('alex','re alex alex 太白'))
    # print(re.search('alex','re aaaelx 太白'))  # 找不到,返回None
    ret = re.search('alex','re alex alex 太白')  # <_sre.SRE_Match object; span=(3, 7), match='alex'>
    print(ret.group())   # alex
     match:行首,None,同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
    print(re.match('barry','barry fdlfjsadfkl ').group())   # 同样用group()取值
    print(re.match('barry','qbarry fdlfjsadfkl '))
    split 分割 可按照任意分割符进行分割   *****
    s1 = 'wusir;太白,alex|日天!小虎'
    print(re.split('[;,|!]',s1))
    sub 替换
    print(re.sub('barry', '太白金星', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。',2)) # 2代表替换两个
    #   太白金星是最好的讲师,太白金星就是一个普通老师,请不要将barry当男神对待
    #  制定一个统一的规则

    obj = re.compile('d{2}') # 制定一个统一的匹配规则 print(obj.findall('fdsafsda4312fdsdf324')) print(obj.findall('123fksldjf3432fdsjlkf453')) # ['12', '34', '32', '45']

    finditer 迭代器

    ret = re.finditer('d', 'ds3sy4784a')
    print(ret)
    print(next(ret).group())   # 3
    print(next(ret).group())    # 4
    print([i.group() for i in ret]) # ['7', '8', '4']

    命名分组

    s1 = '深圳电话:0755-546123546 深圳地址:广东..'
    print(re.search('d+-d+',s1).group())
    # 命名分组
    # 分组基础上定规则 ?P<组名>
    ret = re.search('(?P<quhao>d+)-(?P<num>d+)',s1)
    print(ret.group('quhao'))
    print(ret.group('num'))
     
     
     
     
     
     
  • 相关阅读:
    【JavaP6大纲】Java基础篇:为什么jdk8以后HashMap会使用红黑树优化?
    【JavaP6大纲】Java基础篇:HashMap加载因子为什么是0.75?
    【JavaP6大纲】Zookeeper篇:选举机制
    就是要幸福(1)严于律人
    天真的童年
    闲言碎语话心得垃圾工作
    镜花水月
    就是要幸福(3)言行自由
    五年
    爸爸我给你捂捂手
  • 原文地址:https://www.cnblogs.com/echo2019/p/10256979.html
Copyright © 2020-2023  润新知