pythonimportre_Python Re注意问题(持续更新)
PS本文不是讲解基础的
1.比较match和search的区别
search(pattern,string,flags=0)
match(pattern,string,flags=0)
match()在字符串的的开始位置匹配, search会扫描整个字符串查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
看下面两个例子
#match
import re
m = re.match(r"python", 'pythontscrapy')
print(m.group(0))
#输出结果为 python
import re
m = re.match(r"python", 'iovepythonscrapy')
print(m.group(0))
#输出结果为 AttributeError: 'NoneType' object has no attribute 'gr
意思是没匹配到
#search
import re
m = re.search(r"python", 'pythontscrapy')
print(m.group(0))
#输出结果为 python
import re
m = re.search(r"python", 'iovepythonscrapy')
print(m.group(0))
#输出结果为 python
2.findall 返回一个列表 使用和小技巧(以后更新 )
import re
str1 ='welcomeshandong500a700'
info = re.findall(r'\d+',str1)
print(info)
#输出结果 ['500', '700']
3. sub
将字符串中匹配正则表达式的部分替换为其他值
sub(pattern,repl,string,count,flags)
import re
str1 ='welcomeshandong500'
#把500替换为1000
info = re.sub(r'\d+','1000',str1)
print(info)
import re
str1 ='welcomeshandong500'
#把500替换为1000
def addl(match):
val = match.group()
num = int(val)+1
return str(num)
info = re.sub(r'\d+',addl ,str1)
print(info)
sub(pattern,repl,string,count,flags)
repl 可以为变量,也可以为函数。
4.split
根据匹配分割字符串,返回分割字符串组成的列表。
split(pattern,string,maxsplit=0,flags=0)
import re
str1 ='xueke:yuwen shuxue tiyu'
pt = re.split(r':| ',str1)
print(pt)
#输出结果 ['xueke', 'yuwen', 'shuxue', 'tiyu']
5.finditer
返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。
re.finditer(pattern, string[, flags])
import re
str1 ='welcomeshandong500sadas1000'
pt = re.finditer('\d+',str1)
for x in pt:
print('-------正在输出')
print(x.group(0))
#输出结果
-------正在输出
500
-------正在输出
1000
group()、groups()与group(index)的区别,如下所示:
>>> import re
>>> s = '23432werwre2342werwrew'
>>> p = r'(\d*)([a-zA-Z]*)'
>>> m = re.match(p,s)
>>> m.group()
'23432werwre'
>>> m.group(0)
'23432werwre'
>>> m.group(1)
'23432'
>>> m.group(2)
'werwre'
>>> m.groups()
('23432', 'werwre')
>>> m = re.findall(p,s)
>>> m
[('23432', 'werwre'), ('2342', 'werwrew'), ('', '')]
>>> p=r'(\d+)'
>>> m=re.match(p,s)
>>> m.group()
'23432'
>>> m.group(0)
'23432'
>>> m.group(1)
'23432'
>>> m.groups()
('23432',)
>>> m=re.findall(p,s)
>>> m
['23432', '2342']
综上:
group():母串中与模式pattern匹配的子串;
group(0):结果与group()一样;
groups():所有group组成的一个元组,group(1)是与patttern中第一个group匹配成功的子串,group(2)是第二个,依次类推,如果index超了边界,抛出IndexError;
findall():返回的就是所有groups的数组,就是group组成的元组的数组,母串中的这一撮组成一个元组,那一措组成一个元组,这些元组共同构成一个list,就是findall()的返回结果。另,如果groups是只有一个元素的元组,findall的返回结果是子串的list,而不是元组的list了。
例子
s ="1113446777"
>>> import re
>>> s='1113446777'
>>> m = re.findall(r'(\d)\1*',s)
>>> print m
['1', '3', '4', '6', '7']
>>> m = re.search(r'(\d)\*',s)
>>> m.group()
>>> m=re.search(r'(\d)\1*',s)
>>> m.group()
'111'
>>> m.groups()
('1',)
>>> m.group(0)
'111'
>>> m.group(1)
'1'
>>> m.group(2)
Traceback (most recent call last):
File "", line 1, in
IndexError: no such group
>>> m=re.finditer(r'(\d)\1*',s)
>>> m.next().group()
'111'
>>> m.next().group()
'3'
>>> m.next().group()
'44'
>>> m.next().group()
'6'
>>> m.next().group()
'777'
>>> m.next().group()
Traceback (most recent call last):
File "", line 1, in
StopIteration
另一个例子
>>> p = r'(\d)\1+([a-zA-Z]+)'
>>> s = '1111werwrw3333rertert4444'
>>> p = r'(\d)\1+([a-zA-Z]*)'
>>> import re
>>> re.findall(p,s)
[('1', 'werwrw'), ('3', 'rertert'), ('4', '')]
>>> m = re.search(p,s)
>>> m.group()
'1111werwrw'
>>> m.group(1)
'1'
>>> m.group(2)
'werwrw'
>>> m.groups()
('1', 'werwrw')
>>> m = re.finditer(p,s)
>>> m.next().group()
'1111werwrw'
>>> m.next().group()
'3333rertert'
>>> m.next().group()
'4444'
>>> m.next().group()
Traceback (most recent call last):
File "", line 1, in
StopIteration
pythonimportre_Python Re注意问题(持续更新)相关推荐
- s-systemtap工具使用图谱(持续更新)
整体的学习思维导图如下,后续持续更新完善 文章目录 安装 简介 执行流程 执行方式 stap脚本语法 探针语法 API函数 探针举例 变量使用 基本应用 1. 定位函数位置 2. 查看文件能够添加探针 ...
- swift 错误集合 ------持续更新中
从今天开始凡是在用swift中遇到的错误都会在本博客持续更新 便于自己学习和快速开发 2017.7.20 如果你的程序写的有进入后台的方法,例如我的博客中点击home进入后台持续定位的那篇文章,发信进 ...
- 快应用开发常见问题以及解决方案【持续更新】
接触快应用也有一段时间了,踩过了大大小小的坑,让我活到了今天.准备在此立贴持续更新,记录遇到的问题以及解决方案,造福大众. css 方面 1.文字竖排不支持 目前官方还不支持writing-mode, ...
- Java 最常见的 10000+ 面试题及答案整理:持续更新
Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...
- UDP 构建p2p打洞过程的实现原理(持续更新)
UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55) 阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...
- 大四狗找工作,持续更新
持续更新中.... 转载于:https://www.cnblogs.com/Wiki-ki/p/3979176.html
- 中date转为string_股票数据获取篇(持续更新中...)
这是第一篇量化交易学习文,心里还是有点忐忑,毕竟自己不是金融人士,金融业务能力匮乏,所以从最简单的数据获取入手,各种概念各种策略还在学习中.回测框架选择backtrader,因为网上对此框架的评价甚高 ...
- QT 实用代码片段 (持续更新)
由于项目需要开始转型学习C++,GUI使用QT进行开发,开发过程中踩了不少坑,但是也积累了些宝贵经验,在这儿记录一下,希望能帮到需要的朋友. 1.设置无边框对话框 //设置对话框属性 setWindo ...
- linux环境变量管理器,运维 - linux(ubuntu) 环境变量管理 (持续更新)
运维 - linux(ubuntu) 环境变量管理 (持续更新) 注: 本教程以 Ubuntu16.04 操作, 请细看. 如果看完还不明白, 联系我, 我给你发红包. 一, 查看环境变量: 方法 1 ...
最新文章
- bzoj1799 数位dp
- mysql使用数据库预处理_php中对MYSQL操作之预处理技术(2)数据库dql查询语句
- java汽车生产工厂模式_什么是工厂模式java
- nyoj239月老的难题
- java通用解析excel_java读取简单excel通用工具类
- 最常用的6种原型文件格式对比
- ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作!
- HP大中华区总裁退休感言(孙振耀 )
- 理解FFT, STFT, 加窗的含义
- pip安装指定清华镜像源
- SAN光纤交换机常用命令整理(转)
- asp.net/c# 注册页实现激活邮箱验证
- 程序员最爱说的十句口头禅。。 | 今日最佳
- pyscripter与python的关系_python开发环境PyScripter中文乱码问题解决方案
- 东华大学计算机博士毕业要求,东华大学研究生在学期间发表学术论文要求的暂行规定(修订)...
- android+路由器+名称,手机更改路由器名称
- mysql分区为什么提高性能_通过分区(Partition)提升MySQL性能
- 微信分享,缩略图显示不出来
- OUC软件开发实验5
- 信息与通信工程——重要国际学术会议和国际顶级期刊(仅供参考)