• python——re模块


    # s='hello world'
    # print(s.find('llo'))
    # #2 为索引
    # ret=s.replace('ll','xx')
    # print(ret)
    # #hexxo world
    # print(s.split('w'))
    # #['hello ', 'orld']

    #string 提供的为完全匹配

    #所以我们需要一个模糊的匹配:正则表达式

    #re模块为python中正则表达式的一个调用

    import re

    #第一个方法 findall

    ret=re.findall('lin','fdsggsgfdbcvdlixlinsglkjfds')
    print(ret)
    #
    #二元字符
    #元字符 . ^ & * + ? {} [] \ () |
    #共十一个元字符
    #1. .
    ret=re.findall('w..l','hello world')
    print(ret)
    # . 代指除/的所有东西 它只可代指一个 又称通配符
    #2. ^与$
    ret=re.findall('^w..l','hello world')
    print(ret)
    #^代表只从头匹配 只看开始 若开始不同 就结束

    ret=re.findall('w..l$','hello worl')
    print(ret)
    #同理 $代表从结尾匹配
    #3.重复* + ? {}
    ret=re.findall('zw*','hello zwwwwworld')
    print(ret)
    #* 代表重复匹配 (0,+∞)
    ret=re.findall('ab*','zzza')
    print(ret)
    #此时*代表0 所以显示a

    ret=re.findall('ab+','fdsdfdsabb')
    print(ret)
    # +与*同理 但+为[1,+_∞]
    print(re.findall('a+b','aabfddab'))
    #['aab', 'ab']

    print(re.findall('a?b','aaaabddfdsabhgfhb'))
    #['ab', 'ab', 'b']
    #?区间为[0,1]

    print(re.findall('a{5}b','vaaaaab'))
    #{}为一个定量 可以为任意个数 也可以为一个范围
    print(re.findall('a{1,5}b','vaaab'))
    #优先选择最多的 比如1-5 优先选最多的 例如上例输出为'aaab'
    #我们将其称为贪婪匹配

    #结论:*等于{0,+∞} +等于{1,+∞} ?等于{0,1}
    #不推荐{}

    #4.[]又称字符集
    print(re.findall('[c,d]','cd'))
    #其中仅有c与d
    #结果为['c', 'd'] []的结果代表二选一
    print(re.findall('[a-z]',''))
    #其中代表a-z的范围
    print(re.findall('[w,*]','awdx*'))
    #[]字符集会取消 元字符的特殊功能 直接将其视为字符
    #但有三个字符例外(\ ^ -)
    #-在其中具有范围的意思
    # ^放在[]字符集里 代表除 除此以外的除 也就是非
    print(re.findall('[^t]','iu12tyAiuS'))
    #同时[^4,5] 中,(4,5)是相关联的 之后再进行^处理 也就是说非就是非所有的
    #\ 反斜杠
    # 反斜杠后边跟元字符去除特殊功能
    #反斜杠跟普通字符实现特殊功能
    #\d:匹配任何十进制数:它相当于[0-9]
    #\D:匹配任何非数字字符:它相当于[^0-9]
    #\s:匹配任何空白字符:它相当于[\t\n\r\f\v]
    #\S:匹配任何非空白字符:它相当于[^ \t\n\r\f\v]
    #\w:匹配任何字母数字字符:它相当于[a-zA-Z0-9]
    #\W:匹配任何非字母数字字符:它相当于[^a-zA-Z0-9]
    #\b:匹配一个特殊字符的边界(例如空格、$之类的),指单词和特殊字符间的位置

    print(re.findall('\d{10}','dsadas231243124327657657567657564'))
    #['2312431243', '2765765756']
    print(re.findall('\sfdsf','ffdsfsd fdsf fdsf'))
    #[' fdsf', ' fdsf']寻找空白的地方
    #若为\s 即匹配到了[' ', ' ']
    print(re.findall('\w','hello wordl'))
    #['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd', 'l']
    #即空格以外全取

    print(re.findall('a','I am a man'))
    #['a', 'a', 'a']
    print(re.findall(r'a\b','I am a man'))
    #['a']这样可以仅取想取到的 而不是包含的

    print(re.findall('gj\+','gj+z'))
    #['gj+'] +为特殊字符 被\取消了

    print(re.findall(r'\\','jkd\cd'))
    #['\\']

    #. ()为分组 | 代表意思为或
    print(re.findall('(lin)+','linlinlinazzzi'))
    #['lin'] 为什么?
    print(re.search('(lin)+','linlinlinzzzi').group() )
    #linlinlin

    print(re.search('(lin)|2','2lin').group())
    #2
    print(re.findall('(lin)|2','2lin'))
    #['', 'lin']

    #三、search方法
    ret=re.search('lin','fdsflindhfslin')
    print(ret)
    #<_sre.SRE_Match object; span=(4, 7), match='lin'>
    print(ret.group())
    #lin
    #search方法仅找一个

    #四、难点
    ret=re.search('(?P<id>\d{3})(?P<name>\w{3})','weeew34ttt123ooo')
    #?P<>为固定格式
    #这是一个整体的规则
    print(ret.group())
    #123/ooo
    print(ret.group('id'))
    #123
    print(ret.group('name'))
    #ooo

    #正则表达式的方法
    # 1.findall():所有 结果都返回到一个列表里
    # 2.search():返回匹配到的第一个对象,可调用group() 返回
    # 3.match():只在字符串开始匹配,也只返回一个对象,也需要group()
    #4.split() 分割
    #5sub()替换
    #6.compile()为防止重复 可以用编译一次的规则 取进行匹配

    #match
    ret=re.match('asb','asbfdsfd')
    print(ret)
    print(ret.group())
    #asb

    #split()
    #字符串中'asdf'.split('s')
    print('asdf'.split('s'))
    #['a', 'df']

    ret=re.split('k','djksal')
    print(ret)
    #['dj', 'sal']

    ret=re.split('[j,s]','djksal')
    print(ret)
    #['d', 'k', 'al']
    #先分第一个,再分第二个,若有多个相同的,则多次分 例如
    ret=re.split('[a,b]','adadblbz')
    print(ret)
    #['', 'd', 'd', 'l', 'z']

    #sub 替换
    print(re.sub('l.n','z.i','linsdadfzzi'))
    #z.isdadfzzi
    #好奇怪 我还以为.是不会动的

    #compile
    obj=re.compile('lin')
    ret=obj.findall('linzzzi')
    print(ret)
  • 相关阅读:
    音频重采样48kk转16k
    ld: symbol(s) not found for architecture x86_64问题解决
    麦克风啸叫抑制解决方案之移频法
    gcc makefile 模板
    mysql 分组加序号
    java微信公众号JSAPI支付以及所遇到的坑
    appium新手入门(1)—— appium介绍
    一次完整的JVM堆外内存泄漏故障排查记录
    mysql 批量更改表名
    爬虫技术
  • 原文地址:https://www.cnblogs.com/zzzi/p/11363802.html
Copyright © 2020-2023  润新知