欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > Python-re模块使用正则表达式

Python-re模块使用正则表达式

2024/11/30 12:35:58 来源:https://blog.csdn.net/panpanpan233/article/details/143987217  浏览:    关键词:Python-re模块使用正则表达式

Python - re 模块

  • compile(pattern , flags=0) : 将 字符串格式的正则表达式 转成 Pattern 对象 (Pattern对象是 Python 语言 中 用来表示 正则表达式的 对象)

    • compile 编译正则后返回一个 Pattern 对象, Pattern 对象拥有 下面 所有的 方法, 但 Pattern中的 方法 均没有 pattern 和 flags 参数 。
  • findall(pattern , string, flags=0) : 将 正则表达式 检索到的 内容 提取出来、并返回一个 列表

  • finditer(pattern , string, flags=0) : 将 正则表达式 检索到的 内容 提取出来、并返回一个 迭代器 , 迭代器 中 的 每一个元素 是 Match 对象 。

    • Match 对象 常见的操作
      • span(group=0) : 获取 正则表达式 匹配的 指定 组 内容 的 起始位置 和 结束位置 ,返回一个元组 、 如果 group = 0 代表 获取 整个正则 匹配的的 信息
      • start(group=0) : 获取 正则表达式 匹配的 指定 组 内容 的 起始位置 、 如果 group = 0 代表 获取 整个正则 匹配的的 信息
      • end(group=0) : 获取 正则表达式 匹配的 指定 组 内容 的 结束位置 、 如果 group = 0 代表 获取 整个正则 匹配的的 信息
      • group(group=0) : 获取 正则表达式 匹配的 字符串 ,如果 group = 0 代表 获取 整个正则 匹配的的 信息
      • groups() : 获取 正则表达式 每一个组 匹配的 内容, 返回一个元组
      • groupdict() : 获取 正则表达式 中 命名捕获分组 匹配的 内容, 返回一个 字典 , 键是 组的 名字 , 值 是 该组匹配的 字符串
  • search(pattern , string , flags=0) : 获取 正则表达式 匹配 字符串的 第一个 内容, 返回一个 Match 对象 , 如果 没有找到 匹配的内容, 则返回 None

  • match(pattern, string, flags=0) : 匹配的内容必须是字符串头部信息 ,找到并返回一个 Match对象, 如果 头部信息不匹配正则,则返回 None

  • fullmatch(pattern, string, flags=0) : 相当于 在 正则表达式 上 添加 了 以 … 开头 和 以 … 结尾的 限制 。返回 Match 对象

  • split(pattern, string, maxsplit=0, flags=0) : 根据 正则表达式 匹配的内容 进行 字符串的拆分 、返回 列表

    string = "ab234g465gsf" 
    # 按照数字拆分字符串 
    re.split(r"\d+" ,  string)    #  ["ab", "g",  "gsf"]
    
  • sub(pattern, repl, string, count=0, flags=0) : 将 正则表达式 匹配的内容 替换成 repl 对应的 字符串, count 设置替换的次数 , 0 代表全部替换 、 返回 替换后的 字符串

  • subn(pattern, repl, string, count=0, flags=0) : 将 正则表达式 匹配的内容 替换成 repl 对应的 字符串, count 设置替换的次数 , 0 代表全部替换 、返回 替换后的 字符串和 替换的次数 组成的元组。

    string = "13312344321"
    # 将手机号中间 4位隐藏
    ret = re.sub(r"(?<=1[3-9]\d)(\d{4})(?=\d{4})", "****", string)
    # 将手机号 中间4位颠倒顺序
    ret = re.sub(r"(?<=1[3-9]\d)(\d{4})(?=\d{4})", lambda x: x.group()[::-1],string)
    

sub 和 subn 中 repl 代表 要替换的内容, 可以是一个 字符串 , 也可以是一个函数

正则中的 修饰符

  • i 模式 : 正则 在 匹配 数据的 时候 忽略 大小写

  • dotAll (s) 模式 : 在 该 模式 下 , . 匹配 任意字符

  • m 模式 : 多行、 在正则表达式 使用 限定符的 情况下 、默认匹配整个字符串开始和结尾, 如果使用 了 m 模式, 限定符 就变成了 对 字符串的每一行 进行 限定 。

在 Python中, 可以 通过 re.I , re.S , re.M 获取对应的模式,通过 flags 参数传入 , 如果某个操作需要多个模式,可以 使用 | 位或 运算 处理

string = """
234654dsfsdg
abc34ABD13234
ABC2354GG5
GFfg546fg7
"""# 编写一个正则表达式 、提取字符串中 每一行 以 字母开头的 数据
regex = r".+"
ret = re.findall(regex, string, re.M | re.I)

模块

Python 中 一个 .py 文件 就是一个模块 。

多个 模块 可以使用 包 package 进行 管理 、 包 是一个特殊的文件夹, 下面 必须提供一个 __init__.py 文件

导入

import 导入

  • import 包
  • import 包.模块
  • import 包.模块.函数/类…

    导入 的时候,也可以 通过 as 设置别名

from import 导入

  • from … import …

支持 相对导入 和 绝对导入 。 相对导入 使用 . (当前位置) 或者 .. (上一级位置) , ... (上上级位置) 等 方式 导入

相对导入

只能运用于包的内部、不能应用于 顶层模块(程序入口模块) 、 相对 导入 。 相对导入 只能 导入 和 它 具有 相同父级包 的 模块

顶层模块

程序执行的 入口模块 被称为 顶层模块 , 顶层模块 中不能使用相对导入 。 顶层模块的 模块名__name____main__

推荐在编写代码的时候 , 在 顶层模块 中 添加 if __name__ == '__main__': 判断 、可以保证 判断中的代码只有在该模块为顶层模块时才执行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com