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: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6847032.html" target="_blank">python 基础知识</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6627631.html" target="_blank">python 初始python</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<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>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6752157.html" target="_blank">python 类型及变量</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6847663.html" target="_blank">python 字符串详解</a></strong></span></p>
<p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6850347.html" target="_blank">python 列表详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6850496.html" target="_blank">python 数字元祖</a></strong></span></p>
<p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6851820.html" target="_blank">python 字典详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<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>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087614.html" target="_blank">python 数据类型</a>&nbsp;</strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6752169.html" target="_blank">python文件操作</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/8149209.html" target="_blank">python 闭包</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6705714.html" target="_blank">python 函数详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087616.html" target="_blank">python 函数、装饰器、内置函数</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087629.html" target="_blank">python 迭代器 生成器</a>&nbsp;&nbsp;</strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<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(模块正则表达式)的更多相关文章

  1. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  2. 【Python开发】Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...

  3. sys,os,模块-正则表达式

    # *__conding:utf-8__* """"我是注释""" sys,os模块 import sysimport os pr ...

  4. Python之re模块 —— 正则表达式操作

    这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...

  5. Python re模块 正则表达式

    1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  6. 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时间 ...

  7. re 模块 正则表达式

    re模块(正则表达式)   一.什么是正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它 ...

  8. Python3 re模块(正则表达式)

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过r ...

  9. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

  10. re模块 - 正则表达式 疏理(一)

    在网上总是很难找到令自己比较满意的,关于正则表达式的文章.所以决定自己来总结一波,并配上相应的示例. 正则表达式:定义了规则,用来字符串处理. 用途: 1.匹配 - 符合规则的字符串,则认为匹配了. ...

随机推荐

  1. XXE外部实体注入漏洞——PHP

    前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题. 在XML1.0标准 ...

  2. 清空echarts的option

    将相应的echarts的option治为空 $("#tt5sbmc").html("");

  3. H5的pushState与replaceState的用法

    一.简介 HTML5引入了 history.pushState()和 history.replaceState()方法,它们分别可以添加和修改历史记录条目.这些方法通常与window.onpopsta ...

  4. Exception in thread "main" java.util.ConcurrentModificationException解决方案

    我想判断一个集合里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素, 当时的做法是: public class ListIterator ...

  5. fcgi vs. gunicorn vs. uWSGI

    fcgi vs. gunicorn vs. uWSGI - Peterbe.comhttps://www.peterbe.com/plog/fcgi-vs-gunicorn-vs-uwsgi uWSG ...

  6. 使用python获取微医数据

    用到的包: BeautifulSoup pymysql requests json 碰到的问题: 1.医生查询分页数据不能超过38页,超过无法返回数据 2.某些字段对应的html元素包含一些无效的cl ...

  7. linux rtc中废弃的接口和新的接口

    1. 废弃的接口 rtc_tm_to_time 2. 替换废弃接口的新接口 rtc_tm_sub

  8. springboot整合redis(集群)

    一.加入maven依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId> ...

  9. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_22-页面静态化-静态化测试-静态化程序测试

    测试service内些的静态化的方法 先新建一个测试类 模板的id 放到下拉的静态数据里面 这样这条数据 就是用用的轮播图005这个模板 把这条数据静态化 进入到断点里面.先获取数据模型 获取模板时 ...

  10. centos下使用virtualenv建立python虚拟环境

    在centos使用python3的virtualenv,先用yum install python3 安装后pip3也已经安装好了,pip3 install virtualenv, 在系统中新建一个空文 ...