zoukankan      html  css  js  c++  java
  • re模块下的的常用方法

    引入模块:

    import re

    1.查找
    findall   匹配所有,每一项都是列表中的一个元素

    ret=re.findall("d+","sjkhk172按实际花费928")
    print(ret)
    ['172', '928']

    search  只匹配从左到右的第一个,得到的不是结果,而是一个变量,通过这个变量的group方法来获取结果。

    ret=re.search("d+","sjkhk172按实际花费928")
    print(ret)
    print(ret.group())
    
    
    
    <_sre.SRE_Match object; span=(5, 8), match='172'>
    172
    ret=re.search("d+","sjkhk172按实际花费928")
    
    if ret:#内存地址,这是一个正则的匹配结果
        print(ret.group())#获取真正的结果
    
    
    172

    match  从头开始匹配,相当于search中的正则表达式加上一个^

    ret=re.match("d+$",'172sjkhk按实际花费928')
    print(ret)
    
    
    
    None



    ret=re.match("d+",'172sjkhk按实际花费928')
    print(ret)
    print(ret.group())


    <_sre.SRE_Match object; span=(0, 3), match='172'>
    172
     

    字符串处理的扩展:切割、替换

    split  切割

    s = 'alex83taibai40egon25'
    # ret = re.split('d+',s)
    # print(ret)
    
    ['alex', 'taibai', 'egon', '']

    sub  替换 旧的   新的   替换次数

    ret = re.sub('d+','h','alex83taibai40egon25',2)
    print(ret)
    
     alexhtaibaihegon25

    subn  返回一个元组,返回的第二个元素是替换的次数

    ret = re.subn('d+','H','alex83taibai40egon25')
    print(ret)
    
    
    
    ('alexHtaibaiHegonH', 3)

    re模块的进阶    时间  空间

    compile   节省使用正则表达式解决时间问题   把正则表达式编译成字节码,在以后的多次使用过程中不会多次编码

    ret=re.compile("d+")
    res=ret.findall("alex83taibai40egon25")
    print(res)

    ['83', '40', '25']
    res=ret.search("sjkhk172按实际花费928")
    print(res.group())
    172

    finditer  节省正则表达式解决问题的内存或者空间

    返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存
    ret=re.finditer("d+","alex83taibai40egon25")
    for i in ret:
        print(i.group())
    
    
    
    83
    40
    25

    分组在ret模块下的使用

    s = '<a>wahaha</a>'  # 标签语言 html 网页
    ret = re.search('<(w+)>(w+)</(w+)>',s)
    print(ret.group())  # 所有的结果
    print(ret.group(1)) # 数字参数代表的是取对应分组中的内容
    print(ret.group(2))
    print(ret.group(3))
    
    
    <a>wahaha</a>
    a
    wahaha
    a
    s = '<a>wahaha</a>'
    ret=re.findall('(w+)',s )
    print(ret)
    ret=re.findall('>(w+)<',s)
    print(ret)
    
    
    
    ['a', 'wahaha', 'a']
    ['wahaha']
    为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容
    # 取消分组优先(?:正则表达式)
    ret = re.findall('d+(.d+)?','1.234*4')
    print(ret)
    ['.234', '']
    # 分组命名 (?P<这个组的名字>正则表达式)
    # s = '<a>wahaha</a>'
    # ret = re.search('>(?P<con>w+)<',s)
    # print(ret.group(1))
    # print(ret.group('con'))



    使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
    精准的取到整数 过滤掉小数

    ret=re.findall(r"d+.d+|d+","1-2*(60+(-40.35/5)-(-4*3))") print(ret) ret=re.findall(r"d+.d+|(d+)","1-2*(60+(-40.35/5)-(-4*3))") ret.remove('') print(ret) ['1', '2', '60', '40.35', '5', '4', '3'] ['1', '2', '60', '5', '4', '3']
  • 相关阅读:
    初始面向对象
    python之路——迭代器和生成器
    函数进阶
    python之路——初识函数
    实现css两端对齐
    http
    background-size
    call和apply的区别
    js兼容性
    面试题
  • 原文地址:https://www.cnblogs.com/wqzn/p/9494390.html
Copyright © 2011-2022 走看看