re(模块正则表达式)
re模块(正则)
正则是用一些具有特殊含义的符号组合到一起(成为正则表达式)来描述字符或者字符串的方法,或者说正则就是用来描述一类事物的规则.
import re
#从字符串中全部查找内容,返回一个列表
s = "meet_宝元_meet"
print(re.findall("meet",s))
#['meet', 'meet']
#查找数字,字母(中文),下划线 -- \w
s = "meet_宝元__meet123"
print(re.findall("\w",s))
#['m', 'e', 'e', 't', '_', '宝', '元', '_', '_', 'm', 'e', 'e', 't', '1', '2', '3']
#查找非数字,字母(中文),下划线 -- \W
s = "meet_宝元__meet123!@#"
print(re.findall("\w",s))
#['!', '@', '#']
#查找任意空格,换行符,制表符 -- \s
s = "meet_ 宝元_ me et\t \n"
print(re.findall("\s",s))
#[' ', ' ', ' ', ' ', '\t', ' ', '\n']
#查找非任意空格,换行符,制表符 --\S
s = "meet_ 宝元_ me et\t \n"
print(re.findall("\S",s))
#['m', 'e', 'e', 't', '_', '宝', '元', '_', 'm', 'e', 'e', 't']
#查找数字 --\d
s = "meet_ 宝元_ me et\t \n"
print(re.findall("\d",s))
#['1', '2', '3']
#查找非数字 --\D
s = "meet_ 宝元_ me et\t \n"
print(re.findall("\D",s))
#['m', 'e', 'e', 't', '_', ' ', '宝', '元', '_', ' ', 'm', 'e', ' ', ' ', 'e', 't', '\t', ' ', '\n']
#查找是以什么开头的内容 -- \A ^
s = "meet宝元_123meet"
print(re.findall("\Ameet",s)) #['meet']
print(re.findall("^meet",s)) #['meet']
#查找是以什么结尾的内容 -- \Z $
s = "meet宝元_123meet"
print(re.findall("t\Z",s)) #['t']
print(re.findall("t$",s)) #['t']
#查找换行符 -- \n
s = "meet宝元_123meet \n \t \n"
print(re.findall("\n",s)) #['\n', '\n']
#查找制表符 --\t
s = "meet宝元_123meet \n \t \n"
print(re.findall("\t",s)) #['\t']
# . 只能匹配任意一个内容(非换行符) -- .
s = "m\net宝元_123maet \n \t"
print(re.findall("m.e",s)) #['mae']
# . 只能匹配任意一个内容 -- re.DOTALL
s = "m\net宝元_123maet \n \t"
print(re.findall("m.e",s,re.DOTALL)) #['m\ne', 'mae']
s = "meet宝元_1A-23maet"
print(re.findall("[a-z]",s)) --小写的a到z
#['m', 'e', 'e', 't', 'm', 'a', 'e', 't']
print(re.findall("[A-Z]",s)) --大写的A到Z
#['A']
print(re.findall("[A-Za-z]",s)) --大写和小写的a到z,A到Z
#['m', 'e', 'e', 't', 'A', 'm', 'a', 'e', 't']
print(re.findall("[a-z0-9]",s)) --小写的a到z,数字0到9
#['m', 'e', 'e', 't', '1', '2', '3', 'm', 'a', 'e', 't']
#查找非0-9的内容
s = "meet宝元_1A-23maet"
print(re.findall("[^0-9]",s))
#['m', 'e', 'e', 't', '宝', '元', '_', 'A', '-', 'm', 'a', 'e', 't']
#匹配*前面元素0个或多个(贪婪匹配) -- *
s = "mmmmm"
print(re.findall("m*",s)) #['mmmmm', '']
#匹配+前面元素1个或多个(贪婪匹配) -- +
s = "meet_asdf_msss_mnns_aaam"
print(re.findall("me+",s)) #['mee']
#匹配?前面元素0个或1个 -- ?
s = "meet_af_ms_ms_m"
print(re.findall("m?",s))
#['m', '', '', '', '', '', '', '', 'm', '', '', 'm', '', '', 'm', '']
#{}指定次数
s = "meet_asdf_msss_mmns_aaam"
print(re.findall("s{3}",s)) --s{3} s重复三次 == sss
#['sss']
print(re.findall("s{1,3}",s)) --指定最少多少次,最多多少次
#['s', 'sss', 's']
# 匹配左边或右边 -- |
s = "meet_asdf_msss_mmns_aaam"
print(re.findall("m|s",s))
#['m', 's', 'm', 's', 's', 's', 'm', 'm', 's', 'm']
#任意内容0个或多个 -- .*
s = "m-e-me-meet-meet_123\t \n"
print(re.findall(".*",s))
#['m-e-me-meet-meet_123\t ', '', '']
#任意内容0个或1个
s = "m-e-me-meet-meet_123"
print(re.findall("m.*?e",s))
#['m-e', 'me', 'me', 'me']
#任意内容1个或多个 --.+
s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
print(re.findall("m(.+)t",s))
#['eet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssst']
s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
print(re.findall("m(?:..?)t",s))
#['meet']
s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb 的 alex wusir '
print(re.findall("\w+_sb",s))
#['alex_sb', 'ale123_sb', 'wu12sir_sb', 'wusir_sb', 'ritian_sb']
print(re.findall("[a-z]+_sb",s))
#['alex_sb', 'sir_sb', 'wusir_sb', 'ritian_sb']
#获取括号内的内容 -- []
name = "m-e-me-meet-meet_123"
print(re.findall("[1-9]",name))
#['1', '2', '3'] --[]中的-是什么至什么不会匹配
#findall 全部找到返回一个列表
print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))
#['alex', 'alex', 'alex']
#search 从字符串中任意位置进行匹配查找到一个就停止了,返回的是一个对象,获取匹配的内容必须用.group()进行获取
s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
print(re.search(("ale",s).group()))
#ale
#match 从字符串开始位置进行匹配,找到一个后就停止查找,找到后返回的是一个对象,获取匹配的内容必须用.group()进行获取
s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
print(re.match("ale",s).group())
#报错
#split 分割,可按照任意分隔符进行分割
s = '_sb alex,123:sb;wu12sir#sb*wusir!sb ritian_sb 的 x wusir '
print(re.split("[#,:!*]",s))
#['_sb alex', '123', 'sb;wu12sir', 'sb', 'wusir', 'sb ritian_sb 的 x wusir ']
#sub 替换
print(re.sub('barry', 'meet', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))
# meet是最好的讲师,meet就是一个普通老师,请不要将meet当男神对待。
#compile 定义匹配规则
obj = re.compile('\d{2}')
print(obj.findall("alex12345"))
# ['12', '34']
# finditer 返回一个迭代器
g = re.finditer('al',"alex_alsb,al22,aladf")
print(next(g).group())
print([i.group() for i in g])
# al
#['al','al','al']
#命名分组
ret = re.search("<(?P<tag_name>\w+)>\w+</\w+>","<h1>hello</h1>")
print(ret.group("tag_name"))
print(ret.group())
#h1
#<h1>hello</h1>
练习:
1 "1-2*(60+(-40.35/5)-(-4*3))"
1.1 匹配所有的整数
print(re.findall('\d+',"1-2*(60+(-40.35/5)-(-4*3))"))
1.2 匹配所有的数字(包含小数)
print(re.findall(r'\d+\.?\d*|\d*\.?\d+', "1-2*(60+(-40.35/5)-(-4*3))"))
1.3 匹配所有的数字(包含小数包含负号)
print(re.findall(r'-?\d+\.?\d*|\d*\.?\d+', "1-2*(60+(-40.35/5)-(-4*3))"))
2,匹配一段你文本中的邮箱
s='http://blog.csdn.net/make164492212/article/details/51656638'
print(re.findall("h.*2/",s))
3,匹配一段你文本中的每行的时间字符串 这样的形式:'1995-04-27'
s1 = '''
时间就是1995-04-27,2005-04-27
1999-04-27 老男孩教育创始人
老男孩老师 alex 1980-04-27:1980-04-27
2018-12-08
'''
print(re.findall('\d{4}-\d{2}-\d{2}', s1))
print(re.findall("\d+-\d+-\d+",s1))
4 匹配 一个浮点数
print(re.findall('\d+\.\d*','1.17'))
5 匹配qq号:腾讯从10000开始:
qq = input("请输入QQ号:")
print(re.findall("[1-9][0-9]{4,9}",qq))
s1 = '''
<div id="cnblogs_post_body" class="blogpost-body"><h3><span style="font-family: 楷体;">python基础篇</span></h3>
<p><span style="font-family: 楷体;"> <strong><a href="http://www.cnblogs.com/guobaoyuan/p/6847032.html" target="_blank">python 基础知识</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/p/6627631.html" target="_blank">python 初始python</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <strong><a href="http://www.cnblogs.com/guobaoyuan/articles/7087609.html" target="_blank">python 字符编码</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong><strong> <a href="http://www.cnblogs.com/guobaoyuan/articles/6752157.html" target="_blank">python 类型及变量</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/p/6847663.html" target="_blank">python 字符串详解</a></strong></span></p>
<p><span style="font-family: 楷体;"> <strong><a href="http://www.cnblogs.com/guobaoyuan/p/6850347.html" target="_blank">python 列表详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/p/6850496.html" target="_blank">python 数字元祖</a></strong></span></p>
<p><span style="font-family: 楷体;"> <strong><a href="http://www.cnblogs.com/guobaoyuan/p/6851820.html" target="_blank">python 字典详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <strong><a href="http://www.cnblogs.com/guobaoyuan/p/6852131.html" target="_blank">python 集合详解</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/articles/7087614.html" target="_blank">python 数据类型</a> </strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/p/6752169.html" target="_blank">python文件操作</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/p/8149209.html" target="_blank">python 闭包</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/articles/6705714.html" target="_blank">python 函数详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/articles/7087616.html" target="_blank">python 函数、装饰器、内置函数</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/articles/7087629.html" target="_blank">python 迭代器 生成器</a> </strong></span></p>
<p><span style="font-family: 楷体;"><strong> <a href="http://www.cnblogs.com/guobaoyuan/articles/6757215.html" target="_blank">python匿名函数、内置函数</a></strong></span></p>
</div>
'''
1,找到所有的span标签的内容
ret = re.findall('<span(.*?)>', s1)
print(ret)
2,找到所有a标签对应的url
print(re.findall('<a href="(.*?)"',s1))
便于理解
/fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。 等价于{0,}
/eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。等价于{1,}
/Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。等价于{0,1}
^ 匹配字符串的开始位置,在集合([])中表示“非
re(模块正则表达式)的更多相关文章
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- 【Python开发】Python之re模块 —— 正则表达式操作
Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...
- sys,os,模块-正则表达式
# *__conding:utf-8__* """"我是注释""" sys,os模块 import sysimport os pr ...
- Python之re模块 —— 正则表达式操作
这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...
- Python re模块 正则表达式
1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- re 模块 正则表达式
re模块(正则表达式) 一.什么是正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它 ...
- Python3 re模块(正则表达式)
一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过r ...
- re模块正则表达式
regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...
- re模块 - 正则表达式 疏理(一)
在网上总是很难找到令自己比较满意的,关于正则表达式的文章.所以决定自己来总结一波,并配上相应的示例. 正则表达式:定义了规则,用来字符串处理. 用途: 1.匹配 - 符合规则的字符串,则认为匹配了. ...
随机推荐
- ftp、sftp、vsftp、vsftpd、lftp以及一些网络客户端工具命令
ftp 是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.了解更多ftp lftp :是一个 ...
- 注解之@RequestParam和@GetMapping
@RequestParam用来处理Content-Type 为 application/x-www-form-urlencoded编码的内容,将请求参数名映射到方法参数名.在Http协议中,如果不指定 ...
- yquery-操作样式属性
前几天回家,参加了全国的成人高考,都说学历是找工作的敲门砖,其实一点都不假,尤其是现在的社会竞争力那么强,你不学就会被淘汰.像要过自己想要的生活,就必须努力学习,努力赚钱,买自己想买的,过自己想过的. ...
- POJ 2778 DNA Sequence —— (AC自动机+矩阵快速幂)
距离上次做AC自动机有很久了=.=,以前这题的思路死活看不懂,现在还是觉得很好理解的. 思路参见:http://blog.csdn.net/morgan_xww/article/details/783 ...
- CF1214B
CF1214B 解法: 暴力枚举,时间复杂度 $ O(n) $ CODE: #include<iostream> #include<cstdio> #include<cs ...
- GA算法及参数对结果的影响
1.遗传算法简介 遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖.杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个“染色体”,即个 ...
- vue+webpack 实现懒加载的三种方式
第一种: 引入方式 就是正常的路由引入方式 const router = new Router({ routes: [ { path: '/hyh', component: hyh, name: 'h ...
- Eclipse的下载地址
下载地址:http://eclipse.org/
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_08-新增页面-前端-Api调用
表单数据提交到后台 export const page_add = paramas => { return http.requestPost(apiUrl+'/cms/page/add',par ...
- 停止monkey的方法
注意 Monkey启动后会不断地向被测对象发送随机事件流,直到事件执行完毕或者发生异常时才停止.在Monkey运行过程中,即便断开 与PC的连接,Monkey依然可以在手机上继续运行. 停止Monke ...