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. ...
随机推荐
- html5--2.9新的布局元素(5)-hgroup/address
html5--2.9新的布局元素(5)-hgroup/address 学习要点 了解hgroup/address元素的语义和用法 通过实例理解hgroup/address元素的用法 对照新元素布局与d ...
- sqlite:多线程操作数据库“database is locked”解决方法
1. 使sqlite支持多线程(不确定是否非加不可,暂且加上,以备后患) 可以在编译时/启动时/运行时选择线程模式,参考:http://www.cnblogs.com/liaj/p/4015219.h ...
- 通过阿里云域名动态解析 IP 地址
这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥 ...
- codeforces 659B B. Qualifying Contest(水题+sort)
题目链接: B. Qualifying Contest time limit per test 1 second memory limit per test 256 megabytes input s ...
- cocos2dx 3.0 用ClippingNode做游戏的新手引导
转自:http://blog.csdn.net/star530/article/details/20851263 本篇介绍的是用ClippingNode 做游戏的新手引导,额,或者说是做新手引导的一种 ...
- linux 安装SSH Server + FTP Server(openssh-server + vsftp)
openssh-server (推荐. 一般ssh,ftp 都是单独的,但是这个包含2个) 默认ubuntu 已经安装了, ssh client ,ftp client dpkg -l | grep ...
- NLB
http://www.cnblogs.com/allegro/archive/2011/02/11/1951171.html
- kindeditor Springmvc 整和解决图片上传问题
1. 在编辑页面引入js <script type="text/javascript" charset="utf-8" src="${baseP ...
- petrozavodsk1
A 转化模型和相当于求解小于n/2的最大的和n互质的数字, 显然可以证明所求和n/2相距 O(logn) ,从 n/2 开始向下枚举然后判定即可. B 上下界网络流? C 从底层开始向上走贪心选下层节 ...
- Elasticsearch中提升大文件检索性能的一些总结
笔者在实际生产环境中经常遇到一些大文件的检索,例如一些书籍内容,PDF文件等.今天这篇博客主要来探讨下如何提升ES在检索大文件的一些性能,经验有限,算是一个小小的总结吧! 1.大文件是多大? E ...