re模块 函数模式详解
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,match或re.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模块 函数模式详解的更多相关文章
- python中os模块函数方法详解最全最新
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) os.chdir("dirname") 改 ...
- angular-ngSanitize模块-$sanitize服务详解
本篇主要讲解angular中的$sanitize这个服务.此服务依赖于ngSanitize模块. 要学习这个服务,先要了解另一个指令: ng-bing-html. 顾名思义,ng-bind-html和 ...
- JavaScript严格模式详解
转载自阮一峰的博客 Javascript 严格模式详解 作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...
- Javascript设计模式之装饰者模式详解篇
一.前言: 装饰者模式(Decorator Pattern):在不改变原类和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象. 装饰者模式的特点: 1. 在不改 ...
- ST MCU_GPIO的八种工作模式详解。
补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN ...
- DES加密模式详解
DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...
- Python模块调用方式详解
Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...
- php中的PDO函数库详解
PHP中的PDO函数库详解 PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,P ...
- C语言对文件的操作函数用法详解1
在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...
- MySQL UUID函数的详解(转)
MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l 都可以实现生成唯一值的功能: ...
随机推荐
- 10 Python面向对象编程:类和对象以及和Java的对比
本篇是 Python 系列教程第 10 篇,更多内容敬请访问我的 Python 合集 这里只介绍类和对象,self.属性.方法.访问控制.类继承.方法重写在后面的文章里介绍 在Python中,类和对象 ...
- Kafka原理剖析之「Topic创建」
一.前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略.状态流转等,而Topic的新建语句非常简单 bash kafka-to ...
- 鸿蒙(HarmonyOS)常见的三种弹窗方式
最近有一个想法,做一个针对鸿蒙官方API的工具箱项目,介绍常用的控件,以及在项目中如何使用,今天介绍Harmony中如何实现弹窗功能. 警告弹窗 警告弹窗是一个App中非常常用的弹窗,例如: 删除一条 ...
- Angular 18+ 高级教程 – Naming Conversion
前言 命名规范对项目维护是很重要的. Angular 对项目的渗透很大的, 必须做好命名规范, 不然会很乱. InjectionToken InjectionToken = UPPER_SNAKE_C ...
- Figma 学习笔记 – 黑科技
Figma 其实有蛮多黑科技的, 因为需求真的太多了, 在还没有实现的期间就诞生了很多 hacking 的 way. Feature Issue 实现 min-height 通过 0px 黑科技 其实 ...
- excel江湖异闻录--华麒麟
认识他应该是在18.19年左右,那时就感觉这也是个高手,同大部分的高手一样,痴迷函数,热衷创造.挑战不规范的数据. 后来他消失了好长一段时间,群里的同学都以为他退圈了,偶有少数的同学想起他,言语都带着 ...
- 数据库周刊57丨Oracle 2021年度安全警报;MySQL 8.0.23发布;MySQL索引优化导致的死锁案例;巨杉数据库跨引擎事务实践;MongoDB企业级能力解析;OceanBase OBCP 实验指导手册……
摘要:墨天轮数据库周刊第57期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.Oracle 2021年度安全警报: Critical Patch Update 发布8个 ...
- less 是什么?为什么使用less?
less 是css的预处理器,是动态语言,赋予了css动态的特性,如继承,变量,函数等,less可以执行在客户端和服务端: 为什么使用less a)less 的结构简单,便于扩展 b)实现多重继承 c ...
- HRM平台的登录页的背景图片- scss
.login-container { // 设置背景图片 background-image: url("~@/assets/common/login.jpg"); ba ...
- rabbitmq 新下载链接🔗
Linux下安装RabbitMQ需要依赖socat和erlang插件环境 1 插件下载 1.1 RabbitMQ下载 下载地址一:https://www.rabbitmq.com/download. ...