python进阶11 正则表达式
python进阶11 正则表达式
一、概念
#正则表达式主要解决什么问题?
#1、判断一个字符串是否匹配给定的格式,判断用户提交的又想的格式是否正确
#2、从一个字符串中按指定格式提取信息,抓取页面中的图片数据 res =re.findall(r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.cpm$','121212312@qq.com')#看看右边的邮箱是否匹配左边的格式 #注意:如果正则表达式中适用了小括号,namefindall函数匹配的只会是括号内的内容,而不是完整的匹配,可以利用这种机制来对需要的部分进行数据提取 res=re.findall(r'<img src="data:image/png;base64,(.*?)>',html)#在HTML页面中匹配base64数据
二、元字符
#什么是元字符
#本身具有特殊含义的字符
通配元字符
#表示任意一个字符 import re res=re.findall(r'a','abcae')#去去右边字符串中寻找所有满足左边格式的子字符串1
print(res) #输出['a','a'],只要能找到,我们就认为“匹配” res=re.findall(r'a.','abcae')#输出['ab','ae'],a后面加个任意字符 res=re.findall(r'a...','abcaecc')#输出['abca'],关于重复,只能输出前面的,原因是字符不能重复利用
锚点元字符
#锁定行首 ^
#锁定行位 $
#指定边界 \b res=re.findall(r'^a','abcae') #以a为行首的匹配
print(res) #输出ab res=re.findall(r'a.$','abcae') #以.为行尾的匹配
print(res) #输出ae res=re.findall(r'\bab\b','ab abcd')#ab两边都是边界的匹配
print(res) #输出['ab']
重复元字符
#我匹配要求是一个字符可能会连续重复
#{}表示将前面紧挨的字符重复n次 res = re.findall(r'ab{3}c','abbbc')#左边b{3}相当于bbb res = re.findall(r'ab{2,4}c','abbbc') #左边要求2到4个b #正则表达式里面不能加空格 res = re.findall(r'ab{2,}c','abbbc')#左边要求至少2个b
#需求:a接任意个b res = re.findall(r'ab*c','abbbc')#左边任意个b,0-正无穷 res = re.findall(r'ab+c','abbbc')#左边任意个b,1-正无穷 res = re.findall(r'ab?c','abbbc')#左边表示0或1个
重复字符串(非贪婪)
#{} * + ? 这些字符加上?后表示非贪婪,表示尽量给少的键
res = re.findall(r'ab*','abbbc')#不加?号表贪婪 尽可能匹配多的
print(res) #s输出abbb
res = re.findall(r'ab*?','abbbc')#加个问号尽可能匹配少的
print(res) #输出ab
选择元字符
#二选一 | 字符类 [...]
res = re.findall(r'a(b|d)c','abc-adc-aec') #想匹配出来abc和adc,不要aec,左边的就是表示中间的字符为b或者d res = re.findall(r'a[bd]c','abc-adc-aec') #[]表示想要列举出的所有情况,但是仅仅表示一个字符,输出['abc','adc'],表示选择多个字符的一个 res = re.findall(r'a[^bd]c','abc-adc-aec') #表示除bd以外的所有情况,表示反向 res = re.findall(r'a[b-d0-8]c','abc-adc-aec')#匹配字母b到d,数字0-8的所有情况
字符字面值
#将元字符转义成原来的字符字义 /+元字符 res = re.findall(r'a+c','a+b') #匹配不出来,左边表示a的重复和b res = re.findall(r'a\+c','a+b') #这样就可以了 #将原子符字义转义为有特殊意义的字符
#这便是预定义字符组的由来
三、预定义字符类
#预定义字符类 说明 对等字符组
\d 任意数字字符 [0-9]
\D 任意非数字字符 [^0-9]
\s 任意空白符 [\t\n\x08\f\r]
\S 任意非空白符 [^\t\n\x08\f\r]
\w 任意字母数字字符 [a-zA-Z0-9]
\W 任意非字母数字字符 [^a-zA-Z0-9]
四、分组
#为对多个字符的组合使用元字符
#分组对于匹配的影响
#对分组进行命名 res =re.findall(r'a(bc)+d','abcbcbcbcd')#为了将bc重复,可以将bc分组
print(res) #['bc'] 原因是只会匹配出()里面的东西
#为了使整个部分匹配出来,可以将整个部分括起来
res =re.findall(r'(a(bc)+d)','abcbcbcbcd')
print(res) #[('abcbcbcbcd','bc')]
res =re.findall(r'a(b|c)d','abc-acc-adc-aec')可以通过分组来实现a[bc]c
#按组提取数据
res =re.findall(r'\w+-\w+-\w+-\w+','abc-acc-adc-aec')
print(res)# 输出['abc-acc-adc-aec'] #如果不想要这个 -
res =re.findall(r'(\w+)-(\w+)-(\w+)-(\w+)','abc-acc-adc-aec')
#给分组命名
res =re.search(r'(?P<year>\d+)-(?P<mouth>\d+)-(?P<date>\d+)','2018-03-11')
print(res.groupdict())#输出('day':'11','mouth':'03','year':'2018')
五、总结
#正则表达式是一种一种通用的用来简洁的表达一组字符串的格式或规则,因此,正则表达式与python无关
#通过正则表达式可以去匹配现有的字符串
#通过正则匹配可以迅速过滤出我们需要的全部的或者部分字符串,泳衣查找文本中的特质值等等
python进阶11 正则表达式的更多相关文章
- python进阶(20) 正则表达式的超详细使用
正则表达式 正则表达式(Regular Expression,在代码中常简写为regex. regexp.RE 或re)是预先定义好的一个"规则字符率",通过这个"规 ...
- python进阶之正则表达式
概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 目的? 给定一个正则表 ...
- Python 进阶 - 正则表达式
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
- 尚学python课程---15、python进阶语法
尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- [.net 面向对象程序设计进阶] (4) 正则表达式 (三) 表达式助手
[.net 面向对象程序设计进阶] (2) 正则表达式(三) 表达式助手 上面两节对正则表达式的使用及.NET下使用正则表达式作了详细说明,本节主要搜集整理了常用的正则表达式提供参考. 此外为了使用方 ...
- Python基础之 正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- 【转载】Python中的正则表达式教程
本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...
随机推荐
- 深入理解JVM - 垃圾收集器与内存分配策略 - 第三章
引用计数算法——判断对象是否存活的算法 很多教科书判断对象是否存活的算法是这样的:给对象添加一个引用计数器,每当一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象 ...
- CSS+HTML+JQuery简单菜单
1. [代码]style <style type="text/css"> body,ul,li,a{ margin:0; paddin ...
- laravel基础课程---13、数据库基本操作2(lavarel数据库操作和tp对比)
laravel基础课程---13.数据库基本操作2(lavarel数据库操作和tp对比) 一.总结 一句话总结: 非常非常接近:也是分为两大类,原生SQL 和 数据库链式操作 学习方法:使用时 多看手 ...
- ES索引瘦身 禁用_source后需要设置field store才能获取数据 否则无法显示搜索结果
在默认情况下,开启_all和_source 这样索引下来,占用空间很大. 根据我们单位的情况,我觉得可以将需要的字段保存在_all中,然后使用IK分词以备查询,其余的字段,则不存储. 并且禁用_sou ...
- bjwc Day3 & 4 妈妈我这是来了个什么地方呀
真·bjwc开始了 Day3 T1啥啥啥 第k大斜率?想都没想码了个暴力,然后爆零...暴力都能错,退役 T2看着像网络流就扔了个网络流大暴力上去,六七十分的样子然后蜜汁wa T3题面说“想都没想就弄 ...
- JVM内存溢出环境备份方法
线上Tomcat服务内存溢出,且不容易重现,又没配置JMX监控端口,如何在不重启Tomcat的情况下备份堆dump和线程dump,进而分析原因? 因为Tomcat以服务模式运行,直接用JVisualV ...
- docker安装与操作
准备和安装 1.到这个路径下下载docker engine: https://get.docker.com/rpm/1.7.1/centos-7/RPMS/x86_64/docker-engine-1 ...
- javascript私有属性失效及解决方案
1.js创建私有属性的方法 在 javascript 中所有对象的成员是公有的 构造函数也是如此: function Gadget ( ) { this.name = ' jack '; this.p ...
- JavaScript高级程序设计学习笔记第十四章--表单
1.在 HTML 中,表单是由<form>元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型. HTMLFormElement 继承了 HT ...
- Ubuntu 12.04搭建hadoop单机版环境
前言: 本文章是转载的,自己又加上了一些自己的笔记整理的 详细地址请查看Ubuntu 12.04搭建hadoop单机版环境 Hadoop的三种运行模式 独立模式:无需任何守护进程,所有程序都在单个JV ...