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. 小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)?

    小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)? 自 2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web.iOS.Androi ...

  2. python中的匿名函数

    python 使用 lambda 来创建匿名函数. 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数. lambda 只是一个表达式,函数体比 def 简单很多. lambda的主体是一 ...

  3. 使用 Linux Mint 作为主要操作系统的一些个人常用软件

    本篇文章讲一下一些 Linux 上的应用,多数为日常生活娱乐用的软件,同时也会讲一点开发工具,对于有兴趣继续研究 Linux 的可以参考一下. 目录 软件的安装方式 1.Software Manage ...

  4. JSON字符串控制台格式化输出 java

    1.正常情况下返回的json数据格式如下: {"header":{"transSn":"e33128bb7622462ebfb2cbfcc46baa1 ...

  5. Flask-分开Models解决循环引用

    Flask-分开Models解决循环引用 在之前我们测试中,所有语句都在同一个文件中,但随着项目越来越大,管理起来有所不便,所以将Models分离.基本的文件结构如下 \—–app.py\—–mode ...

  6. PLSQL Developer配置OCI连接远程数据库

    转: PLSQL Developer配置OCI连接远程数据库 当前环境: 本机系统:Win7 32位 PLSQL版本:9.06 数据库版本:10.2 32位 下面开始具体操作. 1.在Oracle官网 ...

  7. NIO单一长连接——dubbo通信模型实现

    转: NIO单一长连接——dubbo通信模型实现 峡客 1.2 2018.07.15 19:04* 字数 2552 阅读 6001评论 30喜欢 17 前言 前一段时间看了下dubbo,原想将dubb ...

  8. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_02-vuejs研究-vuejs基础-MVVM模式

    1.2.1 MVVM模式 vue.js是一个MVVM的框架,理解MVVM有利于学习vue.js.   MVVM拆分解释为:   Model:负责数据存储 View:负责页面展示 View Model: ...

  9. java+大文件分段上传

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  10. mysql允许远程机器连接

    mysql> use mysql; Reading table information for completion of table and column names You can turn ...