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

     常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

       但其实import加载的模块分为四个通用类别: 

      1 使用python编写的代码(.py文件)

      2 已被编译为共享库或DLL的C或C++扩展

      3 包好一组模块的包

      4 使用C编写并链接到python解释器的内置模块

    为何要使用模块?

       如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

        随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用.

    模块类型

    内置模块 不需要自己安装的,解释器自带的

    第三方模块 需要我们自己安装的模块

    自定义模块 我们自己写的模块

    re 模块功能:

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

    import  re
    s = "fwfwefwe45894668fwfe1313"
    ret = re.findall("d+", s)
    print(ret)
    >>>>>>>>>>>>>>>>>>>>>
    ['45894668', '1313']
    findall方法
    import  re
    s = "fwfwefwe45894668fwfe1313"
    ret = re.findall("d", s)
    print(ret)
    >>>>>>>>>>>>>>>>>>>>>>>>>>
    ['4', '5', '8', '9', '4', '6', '6', '8', '1', '3', '1', '3']
    findall 方法
    search: 只匹配从左到右第一个,得到的不是直接的结果而是一个变量,通过变量的group方法来获取结果.如果没有匹配到,会返回None,使用group会报错.
    import  re
    s = "fwfwefwe45894668fwfe1313"
    ret = re.search("d+", s)
    print(ret)   # 正则匹配的结果,内存地址 #<re.Match object; span=(8, 16), match='45894668'>
    print(ret.group()) # 通过ret.group()来获取结果 45894668 只匹配从左到右的第一个
    res = re.search("d+", "quifgfwuigfyf")
    print(res) # 没有匹配到结果是None
    print(res.group()) # 执行res.group会报错
    >>>>>>>>>>>>>>>>>>>
    search()方法
    match :从头开始匹配,相当于search中的正则表达式加一个^.
    import re
    ret = re.match("d+", "16413dwqf")
    print(ret.group())
    >>>>>>>>>>>>>>
    164
    match()方法

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

    split 切割

    s = "fwfwefwe45894668fwfe1313"
    ret = re.split("d+", s)
    print(ret)
    >>>>>>>>>>>>>>>>
    ['fwfwefwe', 'fwfe', '']
    split()
    subn:返回一个元组,第二个元素是替换的次数
    import re
    s = "fwfwefwe45894668fwfe1313"
    ret = re.subn("d", "h", s)
    print(ret)
    >>>>>>>>>>>>>>>>>>>>>>
    ('fwfwefwehhhhhhhhfwfehhhh', 12)
    subn()

    re模块的进阶: 

    compile 节省你使用正则表达式解决问题的时间
    finditer 节省你使用正则表达式解决问题的空间/内存
    import re
    ret = re.finditer("d+", s)
    print(ret)  # 返回的是一个迭代器,所有匹配的结果都在这个里面,通过for循环加group的形式取值
    for i in ret:
        print(i.group())
    >>>>>>>>>>>>>>
    <callable_iterator object at 0x000000000241B710>
    45894668
    1313
    finditer()
    findall 返回列表 找所有的匹配项
    search 匹配就 返回一个变量,通过group取匹配到的第一个值,不匹配就返回None,group会报错
    match 相当于search的正则表达式中加了一个'^'

    spilt 返回列表,按照正则规则切割,默认匹配到的内容会被切掉
    sub/subn 替换,按照正则规则去寻找要被替换掉的内容,subn返回元组,第二个值是替换的次数

    compile 编译一个正则表达式,用这个结果去search match findall finditer 能够节省时间
    finditer 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存
    分组在re中的使用:
    import re
    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
    View Code
    为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容

     


  • 相关阅读:
    通过抓包软件Charles和Fiddle快速模拟(Mock)数据
    截图+贴图工具 Snipaste
    二、Vuex State
    一、Vuex 的概念及安装使用
    一、记录Git使用中遇到的问题及解决方法
    编译Less文件
    Less的基本使用
    二、Git基础操作
    三、Git常用命令
    sql server 自增长字段,标识值重置
  • 原文地址:https://www.cnblogs.com/y122988/p/9494182.html
Copyright © 2011-2022 走看看