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. sentinel 的限流规则及流量控制

    sentinel 前方参考 计算QPS-Sentinel限流算法 https://www.cnblogs.com/yizhiamumu/p/16819497.html Sentinel 介绍与下载使用 ...

  2. python 浅拷贝与深拷贝

    赋值引用 >>> a= {1:[1,2]}>>> b = a>>> b[2]=3>>> b {1: [1, 2], 2: 3} ...

  3. Qml 实现星级评分组件 已发布

    [写在前面] 在现代应用程序中,星级评分是一个常见的用户界面元素,它允许用户对产品.服务或内容进行评价. 想必大家在用各种带有评分的软件中看到过这个组件: 本文将指导你如何使用 Qml 创建一个简单而 ...

  4. CSS——了解

    导入方式:    选择器   

  5. GIS转码的秋招历程与踩坑经历

      本文介绍地理信息科学(GIS)专业的2024届应届生,在研三上学期期间,寻找后端研发.软件开发等IT方向工作的非科班转码秋招情况.   首先,这篇文章一开始写于2023年年底,当时为了参加一个征文 ...

  6. [TK] 三角蛋糕 hzoi-tg#261

    同机房大佬也写了这道题的 题解. 我在另一篇 题解 中提到了这类问题的通解,接下来我们依照此通解思考该题. 问题处理 首先我们来定义三角形的表示方式. 定义 \(f[i][j]\) 表示三角形 \(( ...

  7. [C++] Rander

    注 这个Rander对单个数据的平均分散不太优秀,但是获取大量数据十分平均 当前版本 2.0 for Windows 功能 int rander::reset() 按默认大小重置随机数序列,返回默认大 ...

  8. 东方通TongWeb7部署SuperMap iServer War包

    一.软件版本 操作系统: CentOS 7.5.1804 JDK:1.8_201 东方通:TongWeb7.0.4.2 SuperMap iServer:10.2 二.东方通TongWeb7部署流程 ...

  9. iManager微服务(云套件)配置https证书流程步骤

    本文使用的是10.1版本,需要手动去配置证书,未来版本会考虑进行界面化配置. 一.提前准备 1. 证书需要准备三个文件 *.key *.crt *.keystore 2. 需要知道自己创建的微服务是哪 ...

  10. Laravel视图共享数据

    Laravel视图共享数据 最近在用lavavel过程中想实现公共头部尾部需要的配置数据在所有的页面中都可以使用,便查看了官方文档,在此做一个总结: 一. 修改 ComposerServiceProv ...