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. JVM——类加载

    一.什么是类加载? JVM将class字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入 ...

  2. EGL Driver message (Critical) eglInitialize: No available renderers.

    使用Python的selenium库进行自动化巡检.并将相对应的数据保存 环境: Windows Embedded Standard Python 2.7.16 selenium 3.141.0 [0 ...

  3. Servlet页面跳转的两种方式

    一.页面跳转 1. 请求转发: (1) 使用requestDispatcher对象: 转发格式:request.getRequestDispatcher("path").forwa ...

  4. 为ubuntu安装powerline记录

    C:\Users\win10的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\L ...

  5. Undertow

    Spring Boot 内嵌容器Undertow参数设置 配置项: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 # 不要设置过大,如果过大,启动 ...

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

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

  7. Jetson TX2介绍

    Jetson TX2是NIVDIA瞄准人工智能在Jetson TK1和TX1推出后的升级 TX2的GPU和CPU都进行了升级,内存增加到了8GB.存储增加到了32GB,支持Wifi和蓝牙,编解码支持H ...

  8. Java同步数据结构之LinkedTransferQueue

    前言 LinkedTransferQueue是Java并发包中最强大的基于链表的无界FIFO阻塞传输队列.从JDK7开始出现,Doug Lea说LinkedTransferQueue是Concurre ...

  9. Kontln的属性形式Getter和Setter

    package loaderman.demo class Person { val name: String get() = "name" var v: Int = 0 var v ...

  10. strace调试跟踪程序运行状态

    查看进程调用和执行状态  :   strace  -f -F  -o debug.log  -p   PID(某个进程ID) 参考资料: http://www.itshouce.com.cn/linu ...