re模块

python爬虫过程中,实现页面元素解析的方法很多,正则解析只是其中之一,常见的还有BeautifulSoup和lxml,它们都支持网页HTML元素解析,re模块提供了强大的正则表达式功能

re模块常用方法

  • compile(pattern,flags=0) :用于编译一个正则表达式字符串,生成一个re.pattern对象

    • 参数: pattern:正则表达式字符串,flags:可选标志,用于修改匹配行为(下面会详细讲解)
    pattern = re.compile(r'a.*e')
  • search(pattern,string,flag=0):搜索字符串中第一个匹配,返回一个匹配对象,否则返回None

    • 参数:pattern:正则表达式字符串或编译后的re.pattern对象,string:要搜索的字符串,flags:用于修改匹配行为(如 re.IGNORECASE、re.MULTILINE 等)
    • 返回值:返回一个re.Match对象或None
    result = re.search(r'\bcat\b', 'The cat sat on the mat')
    #输出<re.Match object; span=(4, 7), match='cat'> 接下来会解释
  • match(pattern,string,flags=0):从字符串的开头匹配,如果匹配成功返回一个匹配对象,否则返回None

    • 参数pattern:正则表达式字符串或编译后的re.Pattern 对象,string:要匹配的字符串,flags:可选的标志,用于修改匹配行为
    • 返回值:返回一个re.Match对象或None
    result = re.search(r'\bcat\b', 'The cat sat on the mat')
  • findall(pattern,string,flags=0):返回所有匹配的子串列表

    • 返回值:一个包含所有匹配子串的列表
    result = re.findall(r'\bcat\b', 'The cat sat on the cat mat')
    #输出['cat', 'cat']
  • finditer(pattern,string,flags=0) :返回一个迭代器,产生所有匹配的 Match对象

    • 返回值:一个迭代器,产生 re.Match 对象
    result = re.finditer(r'\bcat\b', 'The cat sat on the cat mat')
    for match in result:
    print(match)
    #<re.Match object; span=(4, 7), match='cat'>
    #<re.Match object; span=(19, 22), match='cat'>
  • sub(pattern,repl,string,count=0,flags=0):替换字符串中所有匹配的子串

    • 参数:repl:替换字符串或替换函数,count:可选参数,指定最大替换次数,默认为0(替换所有匹配)
    • 返回值:替换后的字符串
    result = re.sub(r'\bcat\b', 'dog', 'The cat sat on the cat mat')
    print(result)
    #The dog sat on the dog mat
  • split(pattern,string,maxsplit=0,flags=0) :根据匹配的字串分割字符串

    • 参数:maxsplit:可选参数,指定最大分割次数,默认为0(不限分割次数)
    • 返回值:一个包含分割结果的列表
    text = "The cat sat on the cat mat"
    result = re.split(r'\b', text)
    print(result)
    #['', 'The', ' ', 'cat', ' ', 'sat', ' ', 'on', ' ', 'the', ' ', 'cat', ' ', 'mat', '']

flags模式标志位

模式匹配支持多种模式标志,用于修改匹配模式行为

re.IGNORECASE或re.I

  • 忽略大小写匹配模式

  • eg:

    text = "The cat sat on the cat mat"
    regex = re.compile("CAT", re.IGNORECASE)
    result = regex.search(text)
    if result:
    print(result.group())
    else:
    print("not found")
    #output-> cat

re.MULTILINE或re.M

  • 多行模式,使 ^ 和 $ 匹配每行的开始和结束

  • eg:

    text = """first Line
    second Line2
    third Line3""" regex = re.compile(r'^\w+', re.MULTILINE)
    result = regex.findall(text)
    print(result)
    #output->['first', 'second', 'third']

re.DOTALL 或 re.S

  • 可以使得. 匹配包括换行符在内的所有字符

  • eg:

    text = "abc\ndef\nghi"
    
    regex = re.compile(r'.*', re.DOTALL)
    result = regex.findall(text)
    print(result)
    #output->['abc\ndef\nghi', '']

re.VERBOSE 或 re.X

  • 允许在正则表达式中使用注释和空白

  • eg:

    	text = "The cat sat on the mat"
    
    	regex = re.compile(r"""
    \b #单词边界
    cat#匹配"cat"
    \b#单词边界
    """, re.VERBOSE)
    result = regex.findall(text)
    print(result)
    #output->['cat']

内嵌模式标志

内嵌模式的功能与flags标志位的功能一致,与之不同的是使用内嵌模式标志和注释可以增强正则表达式的可读性和灵活性

常用的内嵌模式标志

  • (?i):忽略大小写

    eg:

    text = "hello world"
    
    regex = re.compile(r"(?#忽略大小写)(?i)HELLO WORLD")
    # (?#...) 是一个注释语法
    result = regex.match(text).group()
    print(result)
  • (?m):多行模式,使 ^ 和 $ 匹配每行的开始和结束,而不仅仅是整个字符串的开始和结束

    eg:

    text = """first Line
    second Line
    third Line""" regex = re.compile(r"(?#多行模式)(?m)^\w+")
    result = regex.findall(text)
    print(result)
    #output->['first', 'second', 'third']
  • (?s):点匹配所有字符模式

    eg:

    text = "abc\ndef\nghi"
    
    regex = re.compile(r"(?#.号匹配换行符在内的所有字符)(?s).*")
    result = regex.findall(text)
    print(result)
    #output->['abc\ndef\nghi', '']
  • (?x):允许注释和空白

    eg:

    text = "The cat sat on the mat"
    
    regex = re.compile(r"(?#允许注释)(?ix)\bCAT\b")
    # ix->忽略大小写的注释模式
    result = regex.findall(text)
    print(result)
    #output->['cat']

re.Match 对象

re.Match对象是re模块中的一个类,用于表示正则表达式匹配的结果,当使用re.search,re,matchre.finditer方法时,若找到了匹配项,这些方法就会返回一个re.Match对象

re.Match返回字段解释

当使用print打印re.Match对象通常会返回<re.Match object; span=(4, 7), match='cat'>这种类似的字段

  • <re.Match object;:该部分表示的这是一个re.Match对象
  • span=(4, 7):表示一个元组,表示的是匹配字串在原始字符串中起始索引和结束索引
  • match='cat’:match是一个字符串,表示实际匹配的字串

访问 re.Match 对象的属性

通过访问re.Match对象的属性,我们可以获取更多信息

  • group():返回匹配的子字符串,如match.group()返回’cat’
  • start():返回匹配字串在原始字符串的起始索引
  • end():返回匹配字串在原始字符串的结束索引
  • span():返回元组表示字串的起始与结束索引

re模块 函数模式详解的更多相关文章

  1. python中os模块函数方法详解最全最新

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) os.chdir("dirname") 改 ...

  2. angular-ngSanitize模块-$sanitize服务详解

    本篇主要讲解angular中的$sanitize这个服务.此服务依赖于ngSanitize模块. 要学习这个服务,先要了解另一个指令: ng-bing-html. 顾名思义,ng-bind-html和 ...

  3. JavaScript严格模式详解

    转载自阮一峰的博客 Javascript 严格模式详解   作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...

  4. Javascript设计模式之装饰者模式详解篇

    一.前言: 装饰者模式(Decorator Pattern):在不改变原类和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象. 装饰者模式的特点: 1. 在不改 ...

  5. ST MCU_GPIO的八种工作模式详解。

    补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN ...

  6. DES加密模式详解

    DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...

  7. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  8. php中的PDO函数库详解

    PHP中的PDO函数库详解 PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,P ...

  9. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  10. MySQL UUID函数的详解(转)

    MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: ...

随机推荐

  1. MyBatis 从入门到放弃 ( MyBatis基础总结 )

    目录 MyBatis历史 Mybatis特性 MyBatis下载 和其它持久化层技术对比 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 创建MyBatis的映射 ...

  2. 坑人的opencv安装

    我想捡起来C++,最近在看opencv,于是我想着一起吧. 但是我低估了这个小麻烦的魅力,曾经安装opencv c++版本就头秃,如今依然头秃.说明我没长进啊-- 折腾了两天,终于装上了. 其中最麻烦 ...

  3. 搭建ipv6并发代理池

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 学习目标 ounter(l ...

  4. OData – How It Work

    前言 OData 是很冷门的东西, 用的人少, 开发的人少, 文档自然也少的可怜. 如果真的想用它, 多少要对它机制有点了解. 这样遇到 bug, 想扩展的时候才不至于完全没有路. 主要参考: ODa ...

  5. EF Core – Soft Delete 实现

    前言 在 SQL Server – Soft Delete 中, 讲到了如果在 SQL Server 实现 Soft Delete. 这篇来说说, EF Core 在中间扮演的角色. 主要参考 Ent ...

  6. maven安装本地jar命令

    mvn install:install-file -Dfile=jar包的位置 -DgroupId=pom.xml的groupId -DartifactId=pom.xm的artifactId -Dv ...

  7. 使用阿里云 SpringBoot 仓库初始化项目

    本文基于:https://www.bilibili.com/video/BV15b4y1a7yG?p=5&vd_source=cf8900ba33d057d422c588abe5d5290d ...

  8. USB分析仪USB3.2日志分析

    1.简介 USB2.0总线采用轮询模式,即总线事务开始时,都要先发送IN或者OUT令牌包,以通知端点或者查询端点是否准备好.而USB3.2采用了异步通知模式,若端点没有准备好,则主机无需轮询,端点准备 ...

  9. 2023年5月中国数据库排行榜:OTO组合回归育新机,华为高斯蓄势待发展雄心

    路漫漫其修远兮,吾将上下而求索. 2023年5月的 墨天轮中国数据库流行度排行 火热出炉,本月共有262个数据库参与排名.本月排行榜前十变动较大,可以用一句话概括为:openGauss 立足创新夺探花 ...

  10. vuex 的modules 子模块总结