day28 re(正则)模块
re模块有什么用?
- 在文本或者字符串内获取你所需要的东西
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜'
import re
res = re.findall('媳妇(.{3})', s)
print(res)
['高翠兰']
re模块的基础使用
import re
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('西瓜', s)
print(res)
['西瓜', '西瓜']
元字符
- 元字符会有特殊的意义
- 常用的元字符
1. ^ 从开头进行匹配
2. $ 从结尾进行匹配
3. | 相当于or,或者的意思
4. [] 找到[]内的任意一个元素的所有元素,^放在里面就是反取
5. . 任意一个字符
6. {3}大括号前面的字符匹配3次,{m,n}匹配前一个字符m至n次,{m,}则匹配m至无限次
7. * 前面的字符匹配0-无穷个
8. + 前面的字符匹配1-无穷个
9. ? 前面的字符匹配0-1个
10. \d 匹配数字[0-9]
11. \s 空白字符(包括\t\r\n\f\v)
12. \w 匹配字符,字母,数字,下划线
13. 上面三个如果是大写,就是反取,[]内使用^也是反取
14. .*? 用了你会爱上它
- ^ $ |
s = '孙悟空找猪八戒找媳妇西高翠兰,然后吃西瓜,再吃西瓜'
# ^ 匹配开头的
res = re.findall('^孙悟空', s)
print(res)
# $ 匹配结尾的
res = re.findall('$猪八戒', s)
print(res)
# | 相当于or
res = re.findall('猪八戒|孙悟空', s)
print(res)
['孙悟空']
[]
['孙悟空', '猪八戒']
- [] .
# [] 找到[]内任意一个元素的所有元素
s = 'abcdefgabckdjfkljsadalasjkdlfjklbkljklfjc'
res = re.findall('[a, b, c]', s)
print(res)
# [^a-z]反取
#匹配出除字母外的字符,^元字符如果写到字符集里就是反取
a = re.findall("[^a-z]", "匹配s这s个字符串是否s匹配f规则re则") # 反取,匹配出除字母外的字符
print(a)
# . 任意一个字符
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜,再吃西瓜'
res= re.findall('媳妇...', s)
print(res)
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'a', 'a', 'b', 'c']
['匹', '配', '这', '个', '字', '符', '串', '是', '否', '匹', '配', '规', '则', '则']
['媳妇高翠兰']
- {} * + ?
# {3} 大括号前面的字符匹配三次
s = '孙悟空找猪八戒找媳妇妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇{3}', s)
print(res)
# * 前面的字符匹配 0-无穷个
s = '孙悟空找猪八戒找媳高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇*',s)
print(res)
# + 前面的字符匹配 1-无穷个
res = re.findall('媳妇+', s)
print(res)
# ? 前面的字符匹配0-1个
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇?', s)
print(res)
['媳妇妇妇']
['媳']
[]
['媳妇']
- \d \s \w
# \d 数字
# 符号可以连在一起使用
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\d+', s)
print(res)
# \D
res = re.findall('\D*', s)
print(res)
['234234']
['孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西', '', '', '', '', '', '', '瓜,再吃 西瓜', '']
# \s 空
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,,再吃 西瓜'
res = re.findall('\s+', s)
print(res)
# \S 费控
res = re.findall('\S*', s)
print(res)
[' ']
['孙悟空找猪八戒找媳妇妇妇高翠兰,,再吃', '', '', '', '西瓜', '']
# \w 字符,字母,数字,下划线
s = '孙悟空找猪八戒找媳妇高$$$$$@@@@翠兰,然____后asddf吃西234234瓜'
res = re.findall('\w+', s)
print(res)
# \W 非字符,字母,数字,下划线
res = re.findall('\W+', s)
print(res)
['孙悟空找猪八戒找媳妇高', '翠兰', '然____后asddf吃西234234瓜']
['$$$$$@@@@', ',']
终极
贪婪模式
- 一直找
- .* 代表所有的
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
# 从第一个猪找到最后一个妇去了
res = re.findall('猪.*妇', s)
print(res)
['猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇']
非贪婪模式
- ?就是停止符,找到一个就停止
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
res = re.findall('猪.*?妇', s)
print(res)
['猪八戒找媳妇']
睡眠革命
re模块高级
comple
- 写一个通用的规则模版
import re
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
res1 = re.compile('\d+')
res2 = re.compile('\w+')
res3 = re.compile('\s+')
result1 = res1.findall(s)
result2 = res2.findall(s)
result3 = res3.findall(s)
print(result1)
print(result2)
print(result3)
phone_compile = re.compile('1\d{10}')
email_compile = re.compile('\w+@\w+.\w+')
test_s = '12345678900 nickchen121@163.com 22812373393@qq.com'
res_phone = phone_compile.findall(test_s)
print(res_phone)
res_email = email_compile.findall(test_s)
print(res_email)
['234234']
['孙悟空找猪八戒找媳妇妇妇高', '翠兰', '然____后asdfasdf吃西234234瓜', '再吃', '西瓜妇']
[' ']
['12345678900']
['nickchen121@163.com', '22812373393@qq.com']
match和search
- match和search的区别,match从开头开始匹配找一个,search搜索所有找第一个
s = '猪八戒找媳妇猪八戒'
# s = '孙悟空找媳妇猪八戒' # match会报错,除非不用group
match_res = re.match('猪八戒', s) # 从开头匹配,取一个
print(match_res.group())
search_res = re.search('猪八戒',s) # 搜索一个
print(search_res.group())
猪八戒
猪八戒
分组函数
?P<n1>
# ?P<>定义组里匹配内容的key(键),<>里面写key名称,值就是匹配到的内容(只对正则函数返回对象时有用)
取出匹配对象方法
只对正则函数返回对象的有用
- group() # 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来,有参取匹配到的第几个如2
- groups() # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果
- groupdict() # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果
origin = "hello world"
# 有两个分组定义了key
# 为何要有分组?提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来)
# ?P<>定义组里匹配内容的key(键),<>里面写key名称,值就是匹配到的内容
r = re.match("(?P<n1>h)(?P<n2>\w+)", origin)
print(r.group()) # 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来
print(r.groups()) # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果
print(r.groupdict()) # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果
hello
('h', 'ello')
{'n1': 'h', 'n2': 'ello'}
re.split()
- 就是字符串的split方法,区别是可以使用正则表达式去替换
import re
s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净没有媳妇(py9的学生们)'
print(s.split(','))
print('-'*50)
res = re.split('\d+',s)
print(res)
s = '猪八戒的媳妇是a高翠兰,孙悟空的媳A妇是b白骨精,唐僧的B媳妇是z女儿国王,沙悟净没有媳妇(py9的学生们)'
print('-'*50)
print(s.split(','))
print('-'*50)
res = re.split('[a-zA-Z]',s) # a,b,c,
print(res)
['猪八戒的媳妇是1高翠兰', '孙悟空的媳妇是2白骨精', '唐僧的媳妇是3女儿国王', '沙悟净没有媳妇(py9的学生们)']
--------------------------------------------------
['猪八戒的媳妇是', '高翠兰,孙悟空的媳妇是', '白骨精,唐僧的媳妇是', '女儿国王,沙悟净没有媳妇(py', '的学生们)']
--------------------------------------------------
['猪八戒的媳妇是a高翠兰', '孙悟空的媳A妇是b白骨精', '唐僧的B媳妇是z女儿国王', '沙悟净没有媳妇(py9的学生们)']
--------------------------------------------------
['猪八戒的媳妇是', '高翠兰,孙悟空的媳', '妇是', '白骨精,唐僧的', '媳妇是', '女儿国王,沙悟净没有媳妇(', '', '9的学生们)']
sub和subn
- 都是用来替换内容,但是subn会计算替换的次数,类似于字符串的replace方法
s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净6没有媳妇(py9的学生们)'
res = re.sub('\d', '', s)
print(res)
print('-'*50)
res = re.subn('\d', '', s)
print(res)
猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)
--------------------------------------------------
('猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)', 5)
分组
- 需要的东西加括号就行了,括号外的东西不打印
import re
s = '猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py9的学生们)'
res = re.findall('(.*?)的媳妇是(.*?)(,)',s)
print(res)
[('猪八戒', '高翠兰', ','), ('孙悟空', '白骨精', ','), ('唐僧', '女儿国王', ',')]
typing
day28 re(正则)模块的更多相关文章
- Python全栈开发【re正则模块】
re正则模块 本节内容: 正则介绍 元字符及元字符集 元字符转义符 re模块下的常用方法 正则介绍(re) 正则表达式(或 RE)是一种小型的.高度专业化的编程语言. 在Python中,它内嵌在Pyt ...
- python_way day6 反射,正则 模块(进度条,hash)
python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...
- 小白的Python之路 day5 re正则模块
re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...
- 认识python正则模块re
python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...
- Python3中正则模块re.compile、re.match及re.search函数用法详解
Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...
- 008---re正则模块
re正则模块 字符串的匹配规则 匹配模式 re.match() re.search() re.findall() re.split() re.sub() 元字符 print('------------ ...
- day22、模块-basedir、os、json模块、pickle和正则模块。
四.正则. re模块: 作用:针对的对象:字符串, 课前引入: 例子一. s='dsdsadsadadsalexdsds's.find('alex') 如何找到字符串内部的alex;?过去学习可使用方 ...
- 21 re正则模块 垃圾回收机制
垃圾回收机制 不能被程序访问到的数据,就称之为垃圾 引用计数 引用计数:用来记录值的内存地址被记录的次数的:当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收 每一次对值地址的引用都可以使该值 ...
- Python——正则模块
1.re模块是用来操作正则表达式 2.正则表达式——用来字符串匹配的 (1)字符组:[字符组] 例如[0123fdsa456*/-] [0-9] 等同于[0123456789] [a-z] 匹配小写 ...
随机推荐
- 2、在1.VMware虚拟机上安装ubantu系统
1.新建新的虚拟机系统 2.使用自定义高级安装 3.选择下一步操作 4.选择稍后安装 4.因为我们要安装的是Linux的发行版本ubuntu,所以这里选择Linux(L),版本是Ubuntu 64位, ...
- 提高生产力:开源Java工具包Jodd(Java的”瑞士军刀”)
官方网站:http://jodd.org/ 下载地址:http://jodd.org/download/index.html Jodd=tools + ioc + mvc + db + aop + t ...
- VirtualBox虚拟机下 解决centos系统无法上网的问题
首先,在VirtualBox中设置网卡连接方式:点“设置”,在弹出的界面中点“网络”,最后选择“连接方式”为“桥接网卡”或者网都可以络地址转换 这两种我试了试都可以 接下来修改一个文件就行: 1.打 ...
- poj 3177&&poj 3352加边构双联通(有重边)用tarjan 模板求的
#include<stdio.h>/* 求边双联通分量和求强连通差不多,先缩点求出叶子节点的个数 */ #include<string.h> #define N 5100 st ...
- 通过winrm使用powershell远程管理服务器
原文地址 在Linux中,我们可以使用安全的SSH方便的进行远程管理.但在Windows下,除了不安全的Telnet以外,从Windows Server 2008开始提供了另外一种命令行原创管理方式, ...
- 单片机显示原理(LCD1602)
一.接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片.与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD ...
- 有关java.util.ConcurrentModificationException
有关java.util.ConcurrentModificationException java doc对这个类的定义: This exception may be thrown by methods ...
- java学习笔记(二)图形用户接口
这个学期主要放在ACM比赛上去了,比赛结束了.不知不觉就15周了,这周就要java考试了,复习一下java吧.java的学习的目的还是让我们学以致用,让我们可以运用java开发一下小项目.而不是单单应 ...
- luogu4012 深海机器人问题 网络流
关键词:最小费用最大流 题目大意:海底是个网格,每个网格边有一定价值的海底化石.每个路线可经过无限个机器人,但上面的化石只能采一次.机器人可沿网格边向东或向北移动.给定机器人起点和终点位置及所能容纳的 ...
- [BZOJ 1579] Revamping Trails
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1579 [算法] dist[u][k]表示当前在点u,升级了k条道路,最短路径的长度 ...