第八篇、正则表达式 re模块
一、常用匹配模式

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
#贪婪匹配:从后面开始
#()只需要提取括号中的内容,顺序从外到内
line="pyrene11111pppp111 a"
# regex_str=".*(p.*p).*" #这个是贪婪模式,从后面匹配得到pp
regex_str=".*?(p.*p).*" #前面有?非贪婪模式,从前面匹配,后面是贪婪模式,后面匹配pyrene11111pppp match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #?非贪婪匹配:问号放左边从左边开始匹配
line="pyrene00000000p pppp123"
regex_str=".*?(p.*?p).*"
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #+的用法
line="pyrene00000000p pppp123"
regex_str=".*(p.+p).*" #这是贪婪模式,所以会从后面开始,这里+最低出现一个,所以结果为ppp
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #{n},限定前面字符出现几次,{1,3}前面字符出现最低1次最多3次
line="pyrene00000000p pppssp123"
# regex_str=".*(p.{1}p).*" #由于必须出现前面的字符一次,这又是贪婪模式,所以会从后往前找,结果pp
regex_str=".*(p.{2}p).*" #这里满足,结果pssp
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #|代表或者
line="pyrene123"
# regex_str="(pssp123|pyrene)"
regex_str="((pssp|pyrene)123)"
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(2)) #这里值为1的时候匹配pyrene123,参数为2匹配pyrene #[]
line="pyrene123"
regex_str="([abc]pyrene123)" #表示第一个字符为中括号中任意字符,就能够匹配到
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(2)) #[] 代表区间 如果里面有.*就不表示特殊含义,^取反
line="18511391111"
# regex_str="(1[48357][0-9]{9})"#这里表示第一个字符是1,第二个字符是中括号中间的内容,第三个字符是0-9之间的树,第四个是前面的匹配9次
regex_str="(1[48357][^1]{9})"#第一个字符表示第一个是1,第二个是中括号的所有内容,第三个字符只要不是1就可以,第四个字符是前面的数字匹配9次 match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #\s代表空格
line="你 好"
regex_str="(你\s好)"
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #\S 表示除了空格都可以
line="你a好"
regex_str="(你\S好)"
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #\w 作用匹配[A-Za-z0-9_],\W作用相反
line="你a好"
regex_str="(你\W好)"
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #[\u4E00-\u9FA5] 提取中文
line="你a好"
regex_str=".*?([\u4E00-\u9FA5])" #非贪婪模式 从左开始匹配
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1)) #
line = "xxx2000年"
regex_str = ".*(\d)年"#这个只获取到了0怎么获取全部呢?方法一是加?,方法二加上{4}
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
小练习:匹配下面的出生日期
line="xxx出生于2001年6月"
line="xxx出生于2001/6/1"
line="xxx出生于2001-6-1"
line="xxx出生于2001-06-01"
line="xxx出生于2001-06"
regex_str=".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))"
match_obj=re.match(regex_str,line)
if match_obj:
print(match_obj.group(1))
re.match和re.compile()
import re
#3位数字-3到8个数字 \d{3}-\d{3-8} #下面如果匹配成功就打印出来
m=re.match(r"\d{3}-\d{3,8}","010-222346512")
print(m.string) #分组
m=re.match(r"(\d{3})-(\d{3,8})","010-1231231")
print(m.group(0)) #原始结果
print(m.group(1)) #第一个分组括号
print(m.group(2))
print(m.groups()) #把所有的组全部放到元祖里面 #匹配时分秒
t='20:15:45'
m=re.match(r'^(0[0-9]|1[0-9]|2[0-9|[0-9])\:(0[0-9]|1[0-9]|2[0-9|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$',t) #注意这里:要去掉特殊含义,$结尾后面的引号不能有空格
print(m.groups()) #分割字符串
p=re.compile(r'\d+') #compile就是把一个模式编译好,然后拿着这个模式到处匹配
print(p.split("sdaasd1321321"))
第八篇、正则表达式 re模块的更多相关文章
- Python之路【第八篇】:Python模块
阅读目录 一.模块和包 模块(module)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到 ...
- python学习【第八篇】python模块
模块与包 模块的概念 在python中一个.py文件就是一个模块. 使用模块可以提高代码的可维护性. 模块分为三种: python标准库 第三方模块 自定义模块 模块的导入方法 1.import语句 ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验八:PS/2模块② — 键盘与组合键
实验八:PS/2模块② — 键盘与组合键 实验七之际,我们学习如何读取PS/2键盘发送过来的通码与断码,不过实验内容也是一键按下然后释放,简单按键行为而已.然而,实验八的实验内容却是学习组合键的按键行 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- Python之路【第八篇】:堡垒机实例以及数据库操作
Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient ...
- python正则表达式Re模块备忘录
title: python正则表达式Re模块备忘录 date: 2019/1/31 18:17:08 toc: true --- python正则表达式Re模块备忘录 备忘录 python中的数量词为 ...
- 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第八篇 实例化Flask的参数 及 对app的配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- ElasticSearch入门 第八篇:存储
这是ElasticSearch 2.4 版本系列的第八篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- 跟我学SpringCloud | 第八篇:Spring Cloud Bus 消息总线
SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特 ...
随机推荐
- python 面试题 string int
str1 = 'hello' str2 = str1 str3 = str1 str4 = str1 str1 = '' int1 = 1 int2 = int1 int3 = int1 int4 = ...
- ActiveMQ部署步骤和后台管理网站Service Unavailable问题解决笔记
最近部署ActiveMQ的时候,发现有的服务器可以打开后台管理网址,有的服务器无法打开,Jetty报503 Service Unavailable. 搞了很久终于发现了问题,现将部署和解决过程做笔记如 ...
- 基于python的七种经典排序算法(转)
一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性:经过某种排序后,如果两个 ...
- 浅谈.net平台下深拷贝和浅拷贝
在.net类库中,对象克隆广泛存在于各种类型的实现中,凡是实现了ICloneable接口的类型都具备克隆其对象实例的能力.所以本文讲述的深拷贝和浅拷贝也是在实现ICloneable接口的基础上进行的 ...
- nginx配置后只有根目录首页index.php能访问,其他页面404
只有首页面根目录可以访问,其他页面地址都是404 not found.网上找了半天url重定向,url重写都试了无效,要不就是重定向过多,下图为跳坑历程. location / { #if ($htt ...
- PSSH 批量管理服务器
pssh命令是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认证访问. 1. ...
- iOS 成员变量和属性的区别
一. 成员变量 1.成员变量的作用范围: @public:在任何地方都能直接访问对象的成员变量 @private:只能在当前类的对象方法中直接访问,如果子类要访问需要调用父类的get/set方法 @p ...
- IOS开发复习笔记(4)-TableView
总结几个TableView常用的代码 1.初始化方面 static string CellIndetifier=@"cellIndetifier"; -(NSInteger)num ...
- 常用代码块:java使用剪贴板复制文本
// 获得系统剪切板 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); // 复制到剪切板上 String ...
- MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
忘记密码怎么办? 1.以管理员身份打开cmd2.执行命令tasklist |findstr mysql ,查看正在运行的mysql进程 3.执行命令taskkill /F /PID 13644(此处进 ...