zoukankan      html  css  js  c++  java
  • re模块

    re模块

    • 取文本或者字符串内找到你所需要的东西

    基础的re使用

    import re
    
    s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜'
    
    res = re.findall('西瓜',s)
    print(res)
    
    ['西瓜']
    
    • ^ 叫做元字符,元字符会有特殊的意义,匹配开头的,也就是说他只从开头找
    res = re.findall('^孙悟空',s)j
    print(res)
    res = re.findall('^猪八戒',s)
    print(res)
    
    ['孙悟空']
    []
    
    • $只从结尾找
    s = '孙悟空找猪八戒找媳妇西高翠兰,然后吃西瓜,再吃西瓜'
    res = re.findall('西瓜$',s)
    print(res)
    
    ['西瓜']
    
    • |相当于or
    res = re.findall('孙悟空|猪八戒',s)
    print(res)
    
    ['孙悟空', '猪八戒']
    
    • []找到[]内的元素
    s = 'abcdefgabckdjfkljsadalasjkdlfjklbkljklfjc'
    
    res = re.findall("[a,b,c]",s)
    print(res)
    
    ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'a', 'a', 'b', 'c']
    
    • . 任意一个字符
    s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜,再吃西瓜'
    #
    res = re.findall('媳妇...',s)
    print(res)
    
    ['媳妇高翠兰']
    
    • {3}大括号前面的字符匹配3次
    s = '孙悟空找猪八戒找媳妇妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
    res = re.findall('媳妇{5}',s)
    print(res)
    
    []
    
    • *,前面的字符匹配无穷个,
    s = '孙悟空找猪八戒找媳高翠兰,然后吃西瓜,再吃西瓜'
    res = re.findall('媳妇*',s)
    print(res)
    
    ['媳']
    
    • +前面的字符,1到无穷个
    s = '孙悟空找猪八戒找媳高翠兰,然后吃西瓜,再吃西瓜'
    res = re.findall('媳妇+',s)
    print(res)
    
    []
    
    • ?前面的字符0-1个
    s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
    res = re.findall('媳妇?',s)
    print(res)
    
    ['媳妇']
    
    • d匹配数字
    s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西234234瓜,再吃   西瓜'
    res = re.findall('d*',s)
    print(res)
    
    ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '234234', '', '', '', '', '', '', '', '', '', '']
    
    • D除了是数字都匹配到了
    然后asdfasdf吃西234234瓜,再吃   西瓜'
    res = re.findall('D+',s)
    print(res)
    
    ['孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西', '瓜,再吃   西瓜']
    
    • s,取空白
    s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西234234瓜,再吃   西瓜'
    res = re.findall('s+',s)
    print(res)
    
    ['   ']
    
    • S,去非空字符
    s = '孙悟空找猪八戒找媳妇妇###@@@妇高翠兰,然后asdfa___sdf吃西234234瓜,再吃   西瓜'
    res = re.findall('S+',s)
    print(res)
    
    ['孙悟空找猪八戒找媳妇妇###@@@妇高翠兰,然后asdfa___sdf吃西
    
    • w,字母,数字,下划线
    s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜'
    res = re.findall('w+',s)
    print(res)
    
    ['孙悟空找猪八戒找媳妇妇妇高', '翠兰', '然____后asdfasdf吃西234234瓜', '再吃', '西瓜']
    
    • W,非字母,数字,下划线
    s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜'
    res = re.findall('W+',s)
    print(res)
    
    ['$$$$$@@@@', ',', ',', '   ']
    

    贪婪模式

    s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇'
    res = re.findall('猪.*妇',s)
    print(s)
    
    孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇
    

    非贪婪模式

    s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇'
    #
    res = re.findall('猪.*?妇',s)
    print(res)
    
    ['猪八戒找媳妇']
    

    re模块高级

    compile

    • 写一个通用的规则模板
    import re
    s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇'
    res1 = re.compile('d+')
    res2 = re.compile('w+')
    res3 = re.compile('s+')
    
    result1 = res1.findall(s)
    result2 = res2.findall(s)
    result3 = res3.findall(s)
    print(result1)
    print(result2)
    print(result3)
    
    phone_compile = re.compile('1d{10}')
    
    email_compile = re.compile('w+@w+.w+')
    
    test_s = '12345678900  nickchen121@163.com  2287273393@qq.com'
    res = phone_compile.findall(test_s)
    print(res)
    
    res = email_compile.findall(test_s)
    print(res)
    
    ['234234']
    ['孙悟空找猪八戒找媳妇妇妇高', '翠兰', '然____后asdfasdf吃西234234瓜', '再吃', '西瓜妇']
    ['   ']
    ['12345678900']
    ['nickchen121@163.com', '2287273393@qq.com']
    

    match和search

    • match和srerch的区别,mathch从开头开始匹配找一个,search搜索所有的找第一个
    # match 和 search的区别,mathch从开头开始匹配找一个,search搜索所有找第一个
    import re
    s = '猪八戒找媳妇猪八戒'
    match_res = re.match('猪八戒',s)  # 从开头开始匹配,取一个
    print(match_res.group())
    
    search_res = re.search('猪八戒',s)  # 搜索一个
    print(search_res.group())
    
    猪八戒
    猪八戒
    

    分组

    • 需要的东西括号就行了,括号外的就不打印了
    import re
    
    s = '猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py9的学生们)'
    
    res = re.findall('(.*?)的媳妇是(.*?)(,)',s)
    print(res)
    
    [('猪八戒', '高翠兰', ','), ('孙悟空', '白骨精', ','), ('唐僧', '女儿国王', ',')]
    

    re.split()

    • 就是字符串的split方法,区别是可以使用正则表达式去替换
    import re
    
    s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净没有媳妇(py9的学生们)'
    
    print(s.split(','))
    
    res = re.split('d+',s)
    print(res)
    
    
    
    s = '猪八戒的媳妇是a高翠兰,孙悟空的媳A妇是b白骨精,唐僧的B媳妇是z女儿国王,沙悟净没有媳妇(py9的学生们)'
    
    print(s.split(','))
    
    res = re.split('[a-zA-Z]',s)  # a,b,c,
    print(res)
    
    ['猪八戒的媳妇是1高翠兰', '孙悟空的媳妇是2白骨精', '唐僧的媳妇是3女儿国王', '沙悟净没有媳妇(py9的学生们)']
    ['猪八戒的媳妇是', '高翠兰,孙悟空的媳妇是', '白骨精,唐僧的媳妇是', '女儿国王,沙悟净没有媳妇(py', '的学生们)']
    ['猪八戒的媳妇是a高翠兰', '孙悟空的媳A妇是b白骨精', '唐僧的B媳妇是z女儿国王', '沙悟净没有媳妇(py9的学生们)']
    ['猪八戒的媳妇是', '高翠兰,孙悟空的媳', '妇是', '白骨精,唐僧的', '媳妇是', '女儿国王,沙悟净没有媳妇(', '', '9的学生们)']
    

    sub和subn

    • 他们俩都是替换内容,但是subn会计算替换了多少次,类似于字符串的replace内置方法
    import re
    
    s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净6没有媳妇(py9的学生们)'
    
    print(re.sub('d','',s))
    
    print(re.subn('d','',s))  # 除了会修改内容,还会返回修改了多少次
    
    猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)
    ('猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)', 5)
    
    
  • 相关阅读:
    冒泡排序
    获取某年某月有多少天 & 常用日期转换
    left join,right join ,inner join
    Left join加上where条件的困惑
    ORACLE查询练习
    Ch25 文件和注册表操作(2)-- 读写文件
    Ch25 文件和注册表操作(1)--文件系统
    C#入门经典札记_Ch05变量的更多内容
    C#入门经典札记_Ch04流程控制
    C#入门经典札记_Ch03变量和表达式
  • 原文地址:https://www.cnblogs.com/zuihoudebieli/p/11219165.html
Copyright © 2011-2022 走看看