day18

re模块——正则表达式

匹配方法
  • findall():从字符串中全部查找内容,返回一个列表
s = "meet_宝元_meet"
print(re.findall("meet",s))
# ['meet', 'meet']
  • \w:查找数字、字母(中文)、下划线
  • \W:查找非数字、字母(中文)、下划线
s = "meet_宝元_meet123"
print(re.findall("\w",s))
print(re.findall("\W",s))
# ['m', 'e', 'e', 't', '_', '宝', '元', '_', 'm', 'e', 'e', 't', '1', '2', '3']
# []
  • \s:查找任意空格、换行符、制表符
  • \S:查找非任意空格、换行符、制表符
s = "meet_ 宝元_ meet123    "
print(re.findall("\s",s))
print(re.findall("\S",s))
# [' ', ' ', ' ', ' ', ' ', ' ']
# ['m', 'e', 'e', 't', '_', '宝', '元', '_', 'm', 'e', 'e', 't', '1', '2', '3']
  • \d:查找数字
  • \D:查找非数字
s = "meet_ 宝元_ 123    "
print(re.findall("\d",s))
print(re.findall("\D",s))
# ['1', '2', '3']
# ['m', 'e', 'e', 't', '_', ' ', '宝', '元', '_', ' ', ' ', ' ', ' ', ' ']
  • \A或^:查找是否以什么开头
s = "meet_ 宝元_ 123    "
print(re.findall("\Ameet",s))
print(re.findall("^meet",s))
# ['meet']
# ['meet']
  • \Z或$:查找是否以什么结尾
s = "meet_ 宝元_ 123    tt"
print(re.findall("t\Z",s))
print(re.findall("tt$",s))
# ['t']
# ['tt']
  • \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))
print(re.findall("m.e", s,re.DOTALL))
# ['mae']
# ['m\ne', 'mae']
  • []:匹配字符组中的字符
s = "meet宝元_1A-23maet"
print(re.findall("[a-z]", s)) # 小写的a-z
print(re.findall("[A-Z]", s)) # 大写的A-Z
print(re.findall("[a-zA-Z]", s)) # 大小写的20字母
print(re.findall("[a-zA-Z0-9]", s)) # 大小写的20字母,0-9
print(re.findall("[^0-9]", s)) # 查找非0-9的内容
# ['m', 'e', 'e', 't', 'm', 'a', 'e', 't']
# ['A']
# ['m', 'e', 'e', 't', 'A', 'm', 'a', 'e', 't']
# ['m', 'e', 'e', 't', '1', 'A', '2', '3', 'm', 'a', 'e', 't']
# ['m', 'e', 'e', 't', '宝', '元', '_', 'A', '-', 'm', 'a', 'e', 't']
  • *:匹配0个或者多个 [贪婪匹配]
s = "m mm mmmmmm"
print(re.findall("m*", s))
print(re.findall("m*m", s))
# ['m', '', 'mm', '', 'mmmmmm', '']
# ['m', 'mm', 'mmmmmm']
  • +:匹配1个或多个 [贪婪匹配]
s = "m mm mmmmmm"
print(re.findall("m+", s))
print(re.findall("m+m", s))
# ['m', 'mm', 'mmmmmm']
# ['mm', 'mmmmmm']
  • ?:匹配0个或1个 [非贪婪匹配]
s = "m mm mmmmmm"
print(re.findall("m?",s))
# ['m', '', 'm', 'm', '', 'm', 'm', 'm', 'm', 'm', 'm', '']
  • 内容{n}:查找内容重复n次的
s = "m mm mmm mmmm mmmmm mmmmmm"
print(re.findall("m{2}", s))
print(re.findall("m{4}", s))
print(re.findall("m{6}", s))
# ['mm', 'mm', 'mm', 'mm', 'mm', 'mm', 'mm', 'mm', 'mm']
# ['mmmm', 'mmmm', 'mmmm']
# ['mmmmmm']
  • 内容{n,m}:查找内容重复n-m次
s = "m mm mmm mmmm mmmmm mmmmmm"
print(re.findall("m{2,5}", s))
# ['mm', 'mmm', 'mmmm', 'mmmmm', 'mmmmm']
  • a|b :或
s = "m mm mmss ss s"
print(re.findall("m|s", s))
# ['m', 'm', 'm', 'm', 'm', 's', 's', 's', 's', 's']
  • ():匹配括号内的表达式,也表示一个组
s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
print(re.findall("m(..)t", s))
print(re.findall("m(.?)t", s))
print(re.findall("m(..?)t", s))
print(re.findall("m(?:..?)t",s)) # ?:m和t都连上
print(re.findall("m(.*)t", s))
print(re.findall("m(.*?)t", s))
print(re.findall("m(.+)t", s))
print(re.findall("m(.+?)t", s))
# ['ee']
# []
# ['ee']
# ['meet']
# ['eet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssst']
# ['ee', 'sss', 'mns_aaamaaa', 'ssssssssssss']
# ['eet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssst']
# ['ee', 'sss', 'mns_aaamaaa', 'ssssssssssss'] print(re.search("(?P<tag_name>\w+)\w+\w+","h1hellh1").group())
print(re.search("(?P<aaa>\w+)dfa","asbsadfasdfa").group("aaa"))
print(re.search("(?P<cx>\w+)dfa","asbsadfasdfa").group())
# h1hellh1
# asbsadfas # ?P:命名
# asbsadfasdfa s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb 的 alex wusir '
print(re.findall("\w+_sb",s))
print(re.findall("[a-z]+_sb",s))
# ['alex_sb', 'ale123_sb', 'wu12sir_sb', 'wusir_sb', 'ritian_sb']
# ['alex_sb', 'sir_sb', 'wusir_sb', 'ritian_sb']
方法
  • search():找到一个后就停止查找,从字符串中进行查找,找到后返回的是一个对象,查看元素(group())
s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
print(re.search("ale",s)) # 如果不存在返回None
print(re.search("ale",s).group()) # 如果不存在报错
# <re.Match object; span=(4, 7), match='ale'>
# ale
  • match():找到一个后就停止查找,只从字符串的开头查找,找到后返回一个对象,查看元素(group())
s = 'ale_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
print(re.match("ale",s)) # 开头找不到就返回None
print(re.match("ale",s).group()) # 开头找不到就报错
# <re.Match object; span=(0, 3), match='ale'>
# ale
  • 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","宝元",'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))
# 宝元是最好的讲师,宝元就是一个普通老师,请不要将宝元当男神对待。
  • compile():定义匹配规则
obj = re.compile("\w")
print(obj.findall("meet_宝元_阿萨大大"))
print(re.findall("\w","meet_宝元_阿萨大大"))
# ['m', 'e', 'e', 't', '_', '宝', '元', '_', '阿', '萨', '大', '大']
# ['m', 'e', 'e', 't', '_', '宝', '元', '_', '阿', '萨', '大', '大']
  • finditer():返回一个迭代器的地址
g = re.finditer("\w","大大撒旦")
# print(next(g).group())
for i in g:
print(i.group())
# 大
# 大
# 撒
# 旦
练习
1、取整数
s = "1-2*(60+(-40.35/5)-(-4*3))"
print(re.findall("\d+",s))
# ['1', '2', '60', '40', '35', '5', '4', '3'] 1.2 匹配所有的数字(包含小数)
s = "1-2*(60+(-40.35/5)-(-4*3))"
print(re.findall("\d+\.\d+|\d+",s))
# ['1', '2', '60', '40.35', '5', '4', '3'] 匹配所有的数字(包含小数包含负号)
s = "1-2*(60+(-40.35/5)-(-4*3))"
print(re.findall("-?\d+\.\d+|-?\d+",s))
# ['1', '-2', '60', '-40.35', '5', '-4', '3'] 2,匹配一段你文本中的每行的邮箱
http://blog.csdn.net/make164492212/article/details/51656638 匹配所有邮箱
s = "http://blog.csdn.net/make164492212/article/details/51656638 匹配所有邮箱"
print(re.findall("h(?:.+)ls/", s))
# ['http://blog.csdn.net/make164492212/article/details/'] 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+-\d+-\d+",s1))
# ['1995-04-27', '2005-04-27', '1999-04-27', '1980-04-27', '1980-04-27', '2018-12-08'] 4、匹配qq号:腾讯从10000开始:
num = input("请输入你的数字:")
print(re.findall("[1-9][0-9]{5,10}",num))
# 请输入你的数字:1719932187171993218
# ['1719932187', '171993218'] 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) print(re.findall('<a href="(.*?)"',s1))

day18——re正则表达式的更多相关文章

  1. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  2. day18 python之re模块与正则表达式

    正则表达式 正则表达式,就是匹配字符串内容的一种规则. 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串 ...

  3. Python:Day18 os模块、logging模块、正则表达式

    迭代器 满足迭代器协议: 1.内部有next方法 2.内部有iter()方法 os模块 import os print(os.getcwd()) #C:\Users\Lowry\PycharmProj ...

  4. day18:正则表达式和re模块

    1,复习递归:返回值,不要只看到return就认为已经返回了,要看返回操作是在递归的第几层发生的,然后返回给了谁,如果不是返回给最外层函数,调用者就接收不到,需要再分析,看如何把结果返回回来,超过最大 ...

  5. day18 正则表达式初学

    正则规则:客观存在的,世界上任何一种语言都能使用它. 在线测试网址:http://tool.chinaz.com/regex 正则语句:只和字符串相关,需要考虑的是:在同一个位置上可以出现的字符范围 ...

  6. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

  7. Day18 Django之路由系统、模板语言、Ajax、Model

    一.路由系统 1.创建Django项目 django-admin startproject day18 cd day18 python3 manage.py startapp app01 2.app0 ...

  8. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  9. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

随机推荐

  1. Linux下g++编译thread出错的的解决方法

    错误如下图所示: 因为thread是C++11新加入的特性,所以我们在用g++编译的时候不能直接用,需要在g++后面加上 -std=c++0x -pthread 如果是gcc编译多线程的话则应该要用 ...

  2. Java实现PV操作 | 读者与写者(在三种情况下进行讨论)

    注 :本文应结合[天勤笔记]进行学习. 1.读者优先 设置rmutex信号量来对readcount变量进行互斥访问.mutex信号量对写者与读者进行同步. static syn rmutex=new ...

  3. luogu P1724 东风谷早苗

    二次联通门 : luogu P1724 东风谷早苗 /* luogu P1724 东风谷早苗 模拟即可 手抖 Y-- 打成 Y++ WA了两发.. */ #include <cstring> ...

  4. sql 将字符串转化为table

    /* *参数说明: 第一个参数为要转化的字符串,第二个参数为字符串中间的分隔符 */ ),)) )) as begin ) set @SourceSql=@SourceSql+@StrSeprate ...

  5. sourceforge文件下载过慢

    sourceforge文件下载过慢,可以用下面网址镜像下载, http://sourceforge.mirrorservice.org 按搜索到的项目的英文字母依次查询,如http://sourcef ...

  6. 【CSP膜你赛】ATM

    题目描述 小沈阳在小品里说过:“人生最痛苦的事情是人死了,钱还没花掉”. 于是小宋(80 岁)决定要将所有的储蓄从 ATM 机中取出花光. 小宋忘记 了她有多少存款(银行卡密码她是记得的 2333), ...

  7. 【BigData】Java基础_终端输入2个数字并求和

    1.需求描述 在终端输入2个数字,然后根据输入的数字求和 2.实现代码 package cn.test.logan; import java.util.Scanner; public class Te ...

  8. C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案

    C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案 xml序列化涉及到XmlRoot,XmlInclude,XmlElement,XmlAttribute,XmlType ...

  9. 【python基础学习】基础重点难点知识汇总

    python中decorator装饰器 语法示例: @decorator 什么是装饰器: 问题: 定义一个函数后 在运行时动态增加功能 又不想改动函数本身的代码 示例: # 希望对下列函数调用增加lo ...

  10. 【spring源码学习】spring的事务管理源码学习

    一.抽象概念 1.事务管理器 接口:org.springframework.transaction.PlatformTransactionManager 实现类:org.springframework ...