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. 淘宝订单信息获取接口,淘宝订单信息获取API

    在日常电商软件开发的工作中,我们经常会遇到需要淘宝的订单信息的场景,比如:打单.发货,又比如做BI工具等.这就需要用到淘宝订单信息获取接口.只有获取到淘宝订单信息,才能进行下一步工作. 目前这个接口是 ...

  2. 一个开源、跨平台的.NET UI框架 - Avalonia UI

    前言 今天大姚给大家分享一个开源.免费(MIT License).跨平台的.NET UI框架:Avalonia UI. Avalonia是一个成熟稳定的平台,用于构建桌面.嵌入式.移动的和Web应用程 ...

  3. C++创建与调用dll动态链接库(MinGW64 Dev-C++)

    本文使用的是dev-c++,如果涉及到VC++中不一样的操作,也会适当进行区分. 项目一:创建DLL 1.创建一个DLL类型的项目,当前命名为dlltest,并选择合适的路径进行保存.  2.在生成的 ...

  4. 关于.NET在中国为什么工资低的分析

    引言 近年来,随着软件开发行业的蓬勃发展,越来越多的编程语言和框架进入了市场,成为了不同类型软件开发项目的首选工具.然而,在中国的开发者社区中,.NET 开发人员的工资水平相比其他技术栈,如 Java ...

  5. Goby漏洞发布 | 0day NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞【已验证】

    漏洞名称:NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞 English Name:NACOS /nacos/v1/cs/ops/data/removal ...

  6. 为何不要随便用from xx import *

    新单位,新工作,远程办公,你想想有多麻烦吧. 一块块看每个模块的详细功能. 看到一个函数,返回值也是一个函数,这本来没啥难的,但是文件里只出现一次.怎么都找不到来自哪个文件,后来全项目搜才找到,原来来 ...

  7. 深度学习模型训练的过程理解(训练集、验证集、测试集、batch、iteration、epoch、单步预测、多步预测、kernels、学习率)

    呜呜呜呜,感谢大佬学弟给我讲干货. 本来是讨论项目的,后面就跑偏讲论文模型了. 解答了我一直以来的疑问: 数据放模型里训练的过程. 假设我们有一个数据集26304条数据,假设设置模型读入1000条,如 ...

  8. Figma 学习笔记 – Align 对齐

    Figma 有几个常用的对齐方法 从左到右 1. 左对齐 Alt + A 2.左右居中对齐 Alt + H 3.右对齐 Alt + D 4.上对齐 Alt + W 5.上下居中对齐 Alt + V 6 ...

  9. Go runtime 调度器精讲(八):sysmon 线程和 goroutine 运行时间过长的抢占

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go runtime 调度器精讲(七):案例分析 一文我们介绍了一个抢占的案例.从案例分析抢占的实现,并未涉及到源码层面.本文将继续从源码入 ...

  10. Excel 国产化替换新方案

    前言 在当前数字化转型和信创(信息技术应用创新)战略背景下,企业对于安全性.自主可控性和高效办公工具的需求日益增加.作为一款国产自主研发的高性能表格控件,SpreadJS 正成为替换 Excel 的最 ...