Python3 正则表达式 re 模块的使用 - 学习笔记
re 模块的引入
Python 自1.5版本起增加了
re模块,它提供 Perl 风格的正则表达式模式。
re模块使 Python 语言拥有全部的正则表达式功能。
re 模块的使用
参数含义
- pattern: 字符串形式的正则表达式
- string: 要匹配的字符串
- flags: 可选,表示匹配模式
- pos:可选,字符串中开始搜索的位置索引
- endpos:可选,endpos 限定了字符串搜索的结束
- 不填pos endpos默认扫描全部
re.compile()
compile(pattern, flags=0)
- 将正则表达式的样式编译为一个 正则表达式对象 (正则对象)
- 可以使用正则对象调用
match()等函数
>>> test = '1 one 2 two 3 three'
>>> a=re.compile(r'\d+')
>>> b=a.match(test)
>>> print(f"输出:{b[0]}")
输出:1
re.match()与re.search()
re.match
re.match(pattern, string, flags=0)
Pattern.match(string, pos, endpos)
- 如果 string 的 开始位置 能够找到这个正则样式的任意个匹配,就返回一个相应的 匹配对象。如果不匹配,就返回 None
- 可以使用
group(num)或groups()匹配对象函数来获取匹配表达式group(num=0)表示匹配的整个表达式的字符串group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
>>> test = '1 one 2 two 3 three'
>>> a=re.compile(r'(\d+) (\w+)')
>>> b=a.match(test)
>>> print(f"输出:{b.group()}")
>>> print(f"输出:{b.group(2)}")
>>> print(f"输出:{b.group(1,2)}")
>>> print(f"输出:{b.groups()}")
输出:1 one
输出:one
输出:('1', 'one')
输出:('1', 'one')
Match.start([group])和Match.end([group])- 返回
group匹配到的字串的开始和结束标号。 - 如果
group存在,但未产生匹配,就返回-1。
- 返回
Match.span([group])- 对于一个匹配 m ,返回一个二元组
(m.start(group), m.end(group)) - 注意如果
group没有在这个匹配中,就返回(-1, -1)
- 对于一个匹配 m ,返回一个二元组
re.search()
re.search(pattern, string, flags=0)
Pattern.search(string, pos, endpos)
- 扫描整个 string 寻找第一个匹配的位置, 并返回一个相应的 匹配对象。如果没有匹配,就返回 None
- 其他与
match()一致
>>> test = 'one 2 two 3 three'
>>> a = re.compile(r'(\d+) (\w+)')
>>> b = a.search(test)
>>> c = a.match(test)
>>> print(c)
>>> print(f"输出:{b.group()}")
>>> print(f"输出:{b.group(2)}")
>>> print(f"输出:{b.group(1,2)}")
>>> print(f"输出:{b.groups()}")
输出:None
输出:2 two
输出:two
输出:('2', 'two')
输出:('2', 'two')
区别
match()只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None- 而
search()匹配整个字符串,直到找到一个匹配
re.findall()与re.finditer()
re.findall()
re.findall(pattern, string, flags=0)
Pattern.findall(string, pos, endpos)
- 对 string 返回一个不重复的 pattern 的匹配列表, string 从左到右进行扫描,匹配按找到的顺序返回
- 如果样式里存在一到多个组,就返回一个组合列表;就是一个元组的列表(如果样式里有超过一个组合的话)
>>> test = 'one 2 two 3 three'
>>> a = re.compile(r'(\d+) (\w+)')
>>> b = a.search(test)
>>> b=a.findall(test)
>>> print(f"输出:{b}")
输出:[('2', 'two'), ('3', 'three')]
re.finditer()
re.finditer(pattern, string, flags=0)
Pattern.finditer(string, pos, endpos)
- pattern 在 string 里所有的非重复匹配,返回为一个迭代器 iterator 保存了 匹配对象
>>> test = 'one 2 two 3 three'
>>> a = re.compile(r'(\d+) (\w+)')
>>> b = a.finditer(test)
>>> print(f"输出:{b}")
>>> for i in b:
print(f"输出:{i}")
输出:<callable_iterator object at 0x036E7BD0>
输出:<re.Match object; span=(4, 9), match='2 two'>
输出:<re.Match object; span=(10, 17), match='3 three'>
区别
- 二者最大的区别在于一个返回列表,一个返回迭代器
re.sub()与re.subn()
re.sub()
re.sub(pattern, repl, string, count=0, flags=0)
- repl : 替换的字符串,也可为一个函数。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
- 最后返回替换结果
>>> test = '1 one 2 two 3 three'
>>> a=re.sub(r'(\d+)','xxx',test)
>>> print(f"输出:{a}")
>>> print(f"输出:{test}")
输出:xxx one xxx two xxx three
输出:1 one 2 two 3 three
re.subn()
re.subn(pattern, repl, string, count=0, flags=0)
参数含义同上
- 功能与
re.subn相同,但是返回一个元组 (字符串, 替换次数)
>>> test = '1 one 2 two 3 three'
>>> a=re.subn(r'(\d+)','xxx',test)
>>> print(f"输出:{a}")
>>> print(f"输出:{test}")
输出:('xxx one xxx two xxx three', 3)
输出:1 one 2 two 3 three
re.split()
re.split(pattern, string, maxsplit=0, flags=0)
maxsplit:表示分割次数,默认为0,表示无限制
- 用 pattern 分开 string
- 如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里
>>> test = '1 one 2 two 3 three'
>>> a = re.split(r'\d+', test)
>>> b = re.split(r'(\d+)', test)
>>> print(f"输出:{a}")
>>> print(f"输出:{b}")
输出:['', ' one ', ' two ', ' three']
输出:['', '1', ' one ', '2', ' two ', '3', ' three']
正则表达式修饰符(匹配模式)
re.I 使匹配对大小写不敏感
re.L 做本地化识别匹配
re.M 多行匹配,影响 ^ 和 $
遇到\n视为新的一行,重新匹配 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
Python3 正则表达式 re 模块的使用 - 学习笔记的更多相关文章
- python3 正则表达式re模块
正则表达式的功能:字符串的模糊匹配查询import re元字符 . ---->匹配除换行符意外的任意字符 ^ ---->匹配行首位置 $ ---->匹配行尾位置 关于重复的元字符 * ...
- python3 正则表达式 re模块之辣眼睛 计算器
额...学到几个常用模块了,也要其中考试了,每天晚上敲一点,敲得脑壳疼,不过又想到好一点的办法了,有时间再改吧. 此非吾所欲也,实属无奈也....复习之路漫漫,吾将到书上求索,在此不多逗留,我挥一挥衣 ...
- co模块源码学习笔记
// Sorrow.X --- 添加注释,注释纯属个人理解 /** * slice变量 引用 数组的 slice方法 */ var slice = Array.prototype.slice; /** ...
- Nginx模块之Nginx-Ts-Module学习笔记(一)抢险体验
1.通过HTTP接收MPEG-TS2.生产和管理Live HLS 3.按照官方的编译和配置,当然了我是第一次编译没有通过,在作者重新调整下,编译成功,感谢:@arut https://github.c ...
- python 排序模块 ———— heapq(学习笔记)
from heapq import * def heasort(initi):# 排序 h=[] for value in initi: heappush(h,value)#将每一个item进入hea ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- AVAWEB学习笔记 ---- 系列文章
[JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
随机推荐
- easypermissions拒绝权限后闪退。 java.lang.NoSuchMethodError: No virtual method isStateSaved()Z in class Landroid/support/v4/app/FragmentManager
Process: com.tazan.cd.streetlight, PID: 18825 java.lang.NoSuchMethodError: No virtual method isState ...
- 浅解 go 语言的 interface(许的博客)
我写了一个 go interface 相关的代码转换为 C 代码的样例.也许有助于大家理解 go 的 interface.不过请注意一点,这里没有完整解析 go 语言 interface 的所有细节. ...
- python 练习题3
# 计算阶乘def factorial(n): if n>2: return n*factorial(n-1) else: return nprint(factorial(2))print(fa ...
- 【python测试开发栈】—帮你总结Python os模块高频使用的方法
Python中的os模块是主要和系统操作相关的模块,在平时的工作中会经常用到,花时间整理了os模块的高频使用方法,同时整理出使用时需要注意的点.归纳来讲,os模块的方法可以分为:目录操作.文件操作.路 ...
- 洛谷$P2824\ [HEOI2016/TJOI2016]$ 排序 线段树+二分
正解:线段树+二分 解题报告: 传送门$QwQ$ 昂着题好神噢我$jio$得$QwQQQQQ$,,, 开始看到长得很像之前考试题的亚子,,,然后仔细康康发现不一样昂$kk$,就这里范围是$[1,n]$ ...
- $Poj1723/AcWing123\ Soldiers$ 排序
$Poj$ $AcWing$ $Description$ $Sol$ 分别处理$x$坐标和$y$坐标.$y$坐标显然很好处理,就是排个序然后取中位数就好了.$x$没有$y$那么直接叭.所以我首先写了个 ...
- yum回滚至Kubernetes1.15.7版本
背景:升级Kubernetes版本从1.14.1-->1.17.0,官方说明不能跨版本升级,所以只好一个版本一个版本升级.最终升到1.17.0后发现API的格式有改动,之前的中间件版本很多不支持 ...
- linux下卸载旧版本cmake安装新版本cmake
1.看当前cmake版本 cmake --version 2.卸载旧版本下的cmake apt-get autoremove cmake 3.安装新版面cmake http://www.cnblogs ...
- 利用Python进行数据分析学习记录(一)
1.Python的科学计算邮件列表 pydata:这是一个Google Group邮件列表,其中的问题都是Python数据分析和pandas方面的. pystatsmodels:针对Numpy相关的问 ...
- 2019年全网最热门的123个Java并发面试题总结
前言 并发编程几乎是所有互联网公司面试必问的问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密, ...