Python3正则匹配re.split,re.finditer及re.findall函数用法详解
这篇文章主要介绍了Python3正则匹配re.split,re.finditer及re.findall函数用法,结合实例形式详细分析了正则匹配re.split,re.finditer及re.findall函数的概念、参数、用法及操作注意事项,需要的朋友可以参考下
本文实例讲述了Python3正则匹配re.split,re.finditer及re.findall函数用法。分享给大家供大家参考,具体如下:
re.split re.finditer re.findall
@(python3)
re.compile() 函数
编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。
re 模块最离不开的就是 re.compile 函数。其他函数都依赖于 compile 创建的 正则表达式对象
re.compile(pattern, flags=0)
- pattern 指定编译时的表达式字符串
- flags 编译标志位,用来修改正则表达式的匹配方式。支持 re.L|re.M 同时匹配
flags 标志位参数
re.I(re.IGNORECASE)
使匹配对大小写不敏感
re.L(re.LOCAL)
做本地化识别(locale-aware)匹配
re.M(re.MULTILINE)
多行匹配,影响 ^ 和 $
re.S(re.DOTALL)
使 . 匹配包括换行在内的所有字符
re.U(re.UNICODE)
根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X(re.VERBOSE)
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
示例:
|
1
2
3
4
5
6
7
|
import recontent = 'Citizen wang , always fall in love with neighbour,WANG'rr = re.compile(r'wan\w', re.I) # 不区分大小写print(type(rr))a = rr.findall(content)print(type(a))print(a) |
findall 返回的是一个 list 对象
<class '_sre.SRE_Pattern'>
<class 'list'>
['wang', 'WANG']
re.split 函数
按照指定的 pattern 格式,分割 string 字符串,返回一个分割后的列表。
re.split(pattern, string, maxsplit=0, flags=0)
- pattern compile 生成的正则表达式对象,或者自定义也可
- string 要匹配的字符串
- maxsplit 指定最大分割次数,不指定将全部分割
|
1
2
3
4
5
6
7
8
9
|
import restr = 'say hello world! hello python'str_nm = 'one1two2three3four4'pattern = re.compile(r'(?P<space>\s)') # 创建一个匹配空格的正则表达式对象pattern_nm = re.compile(r'(?P<space>\d+)') # 创建一个匹配空格的正则表达式对象match = re.split(pattern, str)match_nm = re.split(pattern_nm, str_nm, maxsplit=1)print(match)print(match_nm) |
结果:
['say', ' ', 'hello', ' ', 'world!', ' ', 'hello', ' ', 'python']
['one', '1', 'two2three3four4']
re.findall() 方法
返回一个包含所有匹配到的字符串的列表。
- pattern 匹配模式,由 re.compile 获得
- string 需要匹配的字符串
|
1
2
3
4
5
|
import restr = 'say hello world! hello python'pattern = re.compile(r'(?P<first>h\w)(?P<symbol>l+)(?P<last>o\s)') # 分组,0 组是整个 world!, 1组 or,2组 ld!match = re.findall(pattern, str)print(match) |
结果
[('he', 'll', 'o '), ('he', 'll', 'o ')]
re.finditer 、re.findall
re.finditer(pattern, string[, flags=0])
re.findall(pattern, string[, flags=0])
- pattern compile 生成的正则表达式对象,或者自定义也可
- string 要匹配的字符串
findall 返回一个包含所有匹配到的字符的列表,列表类以元组的形式存在。
finditer 返回一个可迭代对象。
示例一:
|
1
2
3
4
5
6
7
8
9
10
11
|
pattern = re.compile(r'\d+@\w+.com') #通过 re.compile 获得一个正则表达式对象result_finditer = re.finditer(pattern, content)print(type(result_finditer))print(result_finditer) # finditer 得到的结果是个可迭代对象for i in result_finditer: # i 本身也是可迭代对象,所以下面要使用 i.group() print(i.group())result_findall = re.findall(pattern, content)print(type(result_findall)) # findall 得到的是一个列表print(result_findall)for p in result_finditer: print(p) |
输出结果:
<class 'callable_iterator'>
<callable_iterator object at 0x10545ec88>
123456@163.com
234567@163.com
345678@163.com
<class 'list'>
['123456@163.com', '234567@163.com', '345678@163.com']
由结果可知:finditer 得到的是可迭代对象,finfdall 得到的是一个列表。
示例二:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import recontent = '''email:123456@163.comemail:234567@163.comemail:345678@163.com'''pattern = re.compile(r'(?P<number>\d+)@(?P<mail_type>\w+).com')result_finditer = re.finditer(pattern, content)print(type(result_finditer))print(result_finditer)iter_dict = {} # 把最后得到的结果for i in result_finditer: print('邮箱号码是:', i.group(1),'邮箱类型是:',i.group(2)) number = i.group(1) mail_type = i.group(2) iter_dict.setdefault(number, mail_type) # 使用 dict.setdefault 创建了一个字典print(iter_dict)print('+++++++++++++++++++++++++++++++')result_findall = re.findall(pattern, content)print(result_findall)print(type(result_findall)) |
输出结果:
<class 'callable_iterator'>
<callable_iterator object at 0x104c5cbe0>
邮箱号码是: 123456 邮箱类型是: 163
邮箱号码是: 234567 邮箱类型是: 163
邮箱号码是: 345678 邮箱类型是: 163
{'123456': '163', '234567': '163', '345678': '163'}
+++++++++++++++++++++++++++++++
[('123456', '163'), ('234567', '163'), ('345678', '163')]
<class 'list'>
finditer 得到的可迭代对象 i,也可以使用 lastindex,lastgroup 方法。
print('lastgroup 最后一个被捕获的分组的名字',i.lastgroup)
findall 当正则没有分组,返回就是正则匹配。
|
1
2
|
re.findall(r"\d+@\w+.com", content)['2345678@163.com', '2345678@163.com', '345678@163.com'] |
有一个分组返回的是分组的匹配
|
1
2
|
re.findall(r"(\d+)@\w+.com", content)['2345678', '2345678', '345678'] |
多个分组时,将结果作为 元组,一并存入到 列表中。
|
1
2
|
re.findall(r"(\d+)@(\w+).com", content)[('2345678', '163'), ('2345678', '163'), ('345678', '163')] |
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
原文链接:https://blog.csdn.net/cityzenoldwang/article/details/78398406
Python3正则匹配re.split,re.finditer及re.findall函数用法详解的更多相关文章
- Python3中正则模块re.compile、re.match及re.search函数用法详解
Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...
- C#的String.Split 分割字符串用法详解的代码
代码期间,把代码过程经常用的内容做个珍藏,下边代码是关于C#的String.Split 分割字符串用法详解的代码,应该对码农们有些用途. 1) public string[] Split(params ...
- python3 正则匹配[^abc]和(?!abc)的区别(把多个字符作为一个整体匹配排除)
目的:把数字后面不为abc的字符串找出来 如1ab符合要求,2abc不符合要求 str = '1ab' out = re.match(r'\d+(?!abc)',str) str1 = '1abc' ...
- OpenCV模板匹配函数matchTemplate详解
参考文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matchin ...
- python3字典:获取json响应值来进行断言的用法详解
在Python中我们做接口经常用到一些json的返回值我们常把他转化为字典,在前面的python数据类型详解(全面)中已经谈到对字典的的一些操作,今天我们就获取json返回值之后,然后转化为字典后的获 ...
- JS中正则匹配的三个方法match exec test的用法
javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...
- python3中列表、元组、字典的增删改查说明详解
python基础中的列表.元组.字典属于python中内置的序列数据结构.其中序列可以进行的操作包括索引.截取(切片).加.乘.成员检查等. 1.列表 列表(list)是最常用的python数据类型之 ...
- sql语句中like匹配的用法详解
在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...
- Linux split命令参数及用法详解---linux分割文件命令
转载自:http://blog.csdn.net/xiaoshunzi111/article/details/52173994 功能说明:分割文件. Split:按指定的行数截断文件 格式: spli ...
随机推荐
- Mqtt paho 回调函数触发机制跟踪
Python Mqtt paho 回调函数触发机制跟踪,我使用的是 buildroot 里面的 mqtt paho , 代码在 ''' buildroot-2017.02.8/output/build ...
- C++11:基于std::queue和std::mutex构建一个线程安全的队列
C++11:基于std::queue和std::mutex构建一个线程安全的队列 C++中的模板std::queue提供了一个队列容器,但这个容器并不是线程安全的,如果在多线程环境下使用队列,它是不能 ...
- windows系统下同时安装mysql5.5和8.0.11
前提:电脑已安装5.5,增安装8.0.11 zip版本 1.官网下载mysql10.8.0.11 —找到mysql community server 为下载页面URL:https://dev.mysq ...
- LD SCore计算基因多效性、遗传度、遗传相关性(the LD Score regression intercept, heritability and genetic correlation)
这篇文章是对之前啊啊救救我,为何我的QQ图那么飘(全基因组关联分析)这篇文章的一个补坑. LD SCore除了查看显著SNP位点对表型是否为基因多效性外,还额外补充了怎么计算表型的遗传度和遗传相关性. ...
- 【tensorflow基础】ubuntu-tensorflow可视化工具tensorboard-No dashboards are active for the current data set.
前言 今天基于tensorflow训练一个检测模型,本应看到训练曲线的,却只见到一个文件events.out.tfevents.1570520647.hostname,后来发现这个文件可以查看训练曲线 ...
- 乐橙平台大华监控Android端实时预览播放
一.初始化 首先我们需要到乐橙开放平台下载android对应的开发包,将sdk中提供的jar和so文件添加到项目中: 二.获取监控列表 监控列表我们是通过从自家后台服务器中获取的,这个自己根据需要调整 ...
- 「模拟赛20191019」C 推式子+贪心+树状数组
题目描述 给定一棵\(n\)个点的有根树,根节点编号为\(1\),点有点权. 定义\(d(v)\)表示\(v\)到\(1\)的路径上的边数. 定义\(f(v,u)\)在\(v<u\)且\(v\) ...
- LeetCode 84. 柱状图中最大的矩形(Largest Rectangle in Histogram)
84. 柱状图中最大的矩形 84. Largest Rectangle in Histogram
- idea常用的快捷键(黑马培训班)
idea常用的快捷键 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Ins ...
- js中引用类型Math一些常用的方法和属性
js中有一种引用类型叫做Math,和Global属于单体内置对象,里面有一些非常常用的数学方法和数学常量 常用数学常量 Math.E; // 自然对数的底数Math.LN10 10的自然对数 Math ...