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 都可以实现生成唯一值的功能: ...
随机推荐
- 淘宝订单信息获取接口API,淘宝打单发货接口
从事电商软件开发的小伙伴,在日常开发任务中,经常会遇到一个需求,就是将淘宝店铺的订单,同步到自己的内部订单管理系统OMS中,进行淘宝打单发货操作.我介绍下如何将订单同步下来,供各位参考.(注意:所有电 ...
- OpenAI GPT-4发布总结
OpenAI官方发布了GPT-4模型,GPT-4是一个大型多模态模型,支持输入文本+图片,输出还是文字形式,GPT-4比任何 GPT-3.5 模型都更强大,能够执行更复杂的任务,并针对聊天进行了优化. ...
- 十五,Spring Boot 整合连接数据库(详细配置)
十五,Spring Boot 整合连接数据库(详细配置) @ 目录 十五,Spring Boot 整合连接数据库(详细配置) 最后: JDBC + HikariDataSource(Spring Bo ...
- Element——前端样式美化
Element 简介 Element 快速入门 https://element.eleme.cn/#/zh-CN/component/button Element 布局 ht ...
- 选择:Qt Creator、Qt Designer、Qt Design Studio,三种开发工具,您选择哪一种?
前言 本文介绍了三种QT开发工具的特点,以及各自的优点和缺点. QT三种工具对比 QT提供的工具 Qt Creator: 扮演的是QT Widgets和QT QML的IDE的角色. 优点: 可以编写C ...
- 使用GRUB Multiboot2引导自制操作系统
使用GRUB Multiboot2引导自制操作系统 前言 之前花了一周时间,从头学习了传统 BIOS 的启动流程.惊讶于背后丰富的技术细节的同时,也感叹 x86 架构那厚重的历史包袱.毕竟,谁能想到, ...
- YashanDB个人版正式开放下载!参与首批体验官活动赢好礼!
好消息!国产数据库YashanDB个人版已正式向所有用户和开发者全面开放下载,该版本已在官网同步上线,欢迎大家前往官网下载体验! 与此同时,YashanDB联合墨天轮技术社区启动首批「产品体验官」尝鲜 ...
- vue项目中的package.json的private选项的作用
{ "name": "项目名称", "description": "描述", "version": ...
- 调试npm下载的组件
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- NlogN 求最长不下降子序列(LIS)
最长不下降子序列是一道非常经典的题目,我们假设题目如下: 有一个数组 $ a $,现在要从中抽取一个严格上升的子序列(子序列就是你可以从原序列里删除一些数,保留一部分数得到的新数列)(严格上升也就是不 ...