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. cesium billboard跨域问题2

    这篇主要是对上一篇博客cesium billboard出现跨域的原理分析 https://www.cnblogs.com/SmilingEye/p/11363837.html 1.源码位置 从Bill ...

  2. Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤

    Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤 一.在ubuntu下尝试 1. 在虚拟机VWware Workstation 12. ...

  3. puppeteer注入cookie然后访问页面

    var puppeteer = require('puppeteer'); const devices = require('puppeteer/DeviceDescriptors'); const ...

  4. Linux设备驱动程序 之 工作队列

    工作队列可以把工作推后,交给一个内核线程去执行–这个下半部分总是会在进程上下文中执行:通过工作队列执行的代码占尽进程上下文的优势:最重要的是工作队列允许重新调度甚至睡眠: 在工作队列和软中断/task ...

  5. 初中知识回顾tan,sin,cos关系

    如果K=tan, sin 是X x=k/power(1+k*k,0.5)  开平方 cos是y y=1.0/power(1+k*k,0.5) 开平方 gisoracle总结 ============= ...

  6. linux下如何批量替换多个文件中的某个字符串?

    答: sed -i "s/<old_string>/<new_string>/g" `grep "<old_string>" ...

  7. 数据分析 - Excel 综合实例 - 杜邦分析法

    项目背景 杜邦分析法 利用 杜邦分析法完成对一份数据的动态分析 流程图如下 项目源数据 左侧为竖向的数据管理, 右侧为横向的数据管理 横向的数据管理在数据透视的时候会很不方便, 并不推荐 常用叫法左边 ...

  8. PAT 甲级 1026 Table Tennis (30 分)(坑点很多,逻辑较复杂,做了1天)

    1026 Table Tennis (30 分)   A table tennis club has N tables available to the public. The tables are ...

  9. [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)

    1 Dijkstra算法 1.1 算法基本信息 解决问题/提出背景 单源最短路径(在带权有向图中,求从某顶点到其余各顶点的最短路径) 算法思想 贪心算法 按路径长度递增的次序,依次产生最短路径的算法 ...

  10. 陷门函数Trapdoor Function

    陷门函数:正向计算是很容易的,但若要有效的执行反向计算则必须要知道一些secret/knowledge/trapdoor(知识?),也称为伪随机置换,可用于构造公钥密码系统. 若 f 为陷门函数,则 ...