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. ...
随机推荐
- java Regex匹配及解析文本
用一个main程序展示下 public static void main(String[] args){ String text = "SSM<br>LOC<b ...
- c++queue容器介绍
一.queue模版类的定义在<queue>头文件中. queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是 ...
- Elasticsearch mapping文档相似性算法
Elasticsearch allows you to configure a scoring algorithm or similarity per field. The similarityset ...
- checkbox怎么判断是否选中
下面这种可以使用 if($("#checkbox1").is(':checked')) { alert("1"); } else { alert("0 ...
- Struts2与ServletAPI解耦
什么是与Servlet API解耦? 为了避免与servlet API耦合在一起,方便Action做单元测试, Struts2对HttpServletRequest,HttpSession,和Serv ...
- MySQL整体架构与内存结构
一 mysql 整体框架: MySQL是由SQL接口,解析器,优化器,缓存,存储引擎等组成的. 1. Connectors指的是不同语言中与SQL的交互. 2. Management Serveic ...
- mysql 中sql语句的执行顺序
今天突然想起来,之前面试一个很牛逼的公司(soho)的时候,一个美眉面试官,面试的时候问到了很多之前都没有意识到的问题,回想起来那美眉看着年纪不大,技术那是真666啊.好了说一下人家问的这个有关mys ...
- Windows下搭建Subversion 服务器
一.准备工作 1.获取 Subversion 服务器程序 到官方网站(http://subversion.tigris.org/)下载最新的服务器安装程序.目前最新的是1.5版本,具体下载地址在:ht ...
- 下拉选择select和复选框checkbox的状态的各种方式
复选框的状态 <input name="ck" value=" " type="checkbox" checked> 或者&l ...
- python中出现 IndentationError:unindent does not match any outer indentation level
python中出现IndentationError:unindent does not match any outer indentation level 今天在网上copy的一段代码,代码很简单,每 ...