zoukankan      html  css  js  c++  java
  • re模块及其用法

    一、re模块下的常用方法

      首先在使用re模块之前,需要引入re模块

      import re

      1.与查找相关的:

        1.findall  返回列表,找到所有的匹配项

    ret = re.findall("d+","asda132eqwe啊阿达456")
    print(ret)
    # ['132', '456']

        2.search 匹配从左到右第一个符合,返回一个变量,通过group方法取到值,没有匹配到就会返回None,使用group会报错。

    ret = re.search("d+","asda132eqwe啊阿达456")
    print(ret.group())
    #132
    ret = re.search("d+","asdaeqwe啊阿达")
    print(ret.group())
    #AttributeError: 'NoneType' object has no attribute 'group'

        3.match 相当于在search的正则表达式中加了一个“^”

      2.与字符串处理相关的;

        1.spilt  返回列表,按照正则规则切割,默认匹配到的内容会被切割掉。

    ret = re.split("d+","asd23sadasd90dasdasd809asd89")  #(d+)可以把切割掉的保留下来
    print(ret)
    # ['asd', 'sadasd', 'dasdasd', 'asd', '']

        2.sub、subn  替换,按照正则规则去寻找要被替换的内容,subn返回元组,第二个值是替换的次数。

    ret = re.sub("d+","H","asd23asd34455asd55")
    print(ret)
    # asdHasdHasdH
    ret = re.subn("d+","H","asd23asd34455asd55")
    print(ret)
    # ('asdHasdHasdH', 3)

      3.re模块的进阶:时间空间

        1.compile  编译一个正则表达式,用这个结果去search match findall finditer 能节省时间,不用每次使用的时候再去编译了。

    ret = re.compile("d+")
    res = ret.findall("asd23asd34455asd55")
    print(res)
    res = ret.search("asd23asd34455asd55")
    print(res.group())

        2.finditer 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存。

    res = re.finditer("d+","asd23asd34455asd55")
    print(res)
    for i in res:
        print(i.group())

    二、分组在re模块中的使用

    s = '<a>wahaha</a>'
    ret = re.search("(>)(w+)(<)",s)
    print(ret.group())    #不加参数,默认是匹配所有结果
    print(ret.group(1))    #数字参数表示的是取对应分组中的内容
    print(ret.group(2))
    print(ret.group(3))
    ret = re.findall(">(w+)<",s)
    print(ret)
    #['wahaha']
    #为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容
    ret = re.findall('d+(?:.d+)?','1.234*4')
    print(ret)
    #['1.234', '4']
    #如果按照优先显示,那么结果就不是想要的。所以在括号中加入"?:"就可以取消分组优先,还不会破坏原本的正则表达式。
    ret = re.split('(d+)','alex83taibai40egon25aa')
    print(ret)
    #['alex', '83', 'taibai', '40', 'egon', '25', 'aa']
    #用split切割后消失的部分,可以用()将正则规则括起来,这样就能得到切割掉的部分
    s = '<a>wahaha</a>'
    ret = re.search(">(?P<com>w+)<",s)
    print(ret.group(1))
    print(ret.group("com"))
    #wahaha
    #wahaha
    #可以通过在分组中加入"?P<name>",来对这个分组命名,在group给参数时可以给这个组的名字。
    #使用前面的分组,要求使用这个名字的分组和前面同名分组中的内容匹配必须一致
    s = '<a>wahaha</a>'
    ret = re.search("<(?P<tag>w+)>(w+)</(?P=tag)>",s)
    print(ret.group())
    #<a>wahaha</a>
  • 相关阅读:
    Unity3D脚本使用:物体调用物体
    Unity3D脚本使用:游戏对象访问
    Unity3D 浏览工具
    spring的工厂方法
    spring运用的设计模式
    Jquery ajax 与 lazyload的混合使用(实现图片异步加载)
    关于线程安全的一点总结
    lazyload的使用心得
    ajax原理及应用
    $.ajax和$.load的区别
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9494448.html
Copyright © 2011-2022 走看看