Python学习 之 正则表达式
1、简单的正则表达式
import re
s=r'abc'
re.findall(s,"aaaaaaaaaaaaaaa") #结果为[]
re.findall(s,"abcaaaaaaaaaaaa") #结果为['abc']
re.findall(s,"abcaaaaaabcaaaa") #结果为['abc','abc']
2、元字符
[] :指定一个字符集 例如:r't[io]p' 满足的字符串包括'tip'或'top'
加上^表示取反 例如:r't[^io]p' 满足的字符串包括除'tip'或'top'之外的字符串
^ :匹配行首 r'^abc' r'\^abc'
$ :匹配行尾
\ :\d=[0-9],\D=[^0-9],\s=[\t\n\r\f\v],\S=[^\t\n\r\f\v],\w=[a-zA-Z0-9],\W=[^a-zA-Z0-9]
\[或\\取消所有的元字符
. :匹配任意字符
* :匹配零次或多次
+ :匹配一次或多次
? :匹配一次或零次 例如:r"^010-?\d{8}$"
r=r"ab+?" #'+?'是最小匹配模式,非贪婪模式
re.findall(r,'abbbbbbbb') #结果是'ab'
{} :{m,n}最少重复m次,最多重复n次 {0,}=* {1,}=+ {0,1}=?
() :分组,经常和‘|’一起使用,例如email的正则表达式r'\w{3}@\w+(\.com|\.cn)'
注意:findall匹配的正则表达式中有分组,先返回匹配分组中的数据
例如:
s='adjadlk hello src=csvt yes jojjlk jlij hello src=python yes jopm'
r1=r'hello src=.+ yes'
re.findall(r1,s) #结果['hello src=csvt yes','hello src=python yes']
r1=r'hello src=(.+) yes'
re.findall(r1,s) #结果['csvt','python']
|
3、正则表达式的编译
编译后的正则表达式效率比编译前的要高许多,例如:
#匹配电话号码
r1=r"\d{3,4}-?\d{8}"
p_tel=re.compile(r1) #编译后的正则表达式效率要高很多
p_tel.findall('010-12345678')
编译时,可以加一些参数,用来实现特殊功能和语法变更,例如:
csvt_re=re.compile(r'csvt',re.I) #re.I表示在编译时忽略大小写
csvt_re.findall('CSVT') #结果是['CSVT']
csvt_re.findall('csvt') #结果是['csvt']
csvt_re.findall('CsVt') #结果是['CsVt']
4、执行匹配
(1)match():决定RE是否在字符串刚开始的位置匹配。未匹配,返回None;否则,返回MatchObject对象
MatchObject实例方法
group():返回被RE匹配的字符串
start():返回匹配开始的位置
end():返回匹配结束的位置
span():返回一个元组包含匹配(开始,结束)的位置
实际程序中,最常见的做法是将MatchObject保存在一个变量中,然后检查他是否为None
(2)search():扫描字符串,找到这个RE匹配的位置。未匹配,返回None;否则,返回MatchObject对象
(3)findall():找到RE匹配的所有子串,并把他们作为一个列表返回
(4)finditer():找到RE匹配的所有子串,并把他们作为一个迭代器返回
5、模块级函数:match()、search()、sub()、subn()、split()、findall()等
(1)sub()用法举例:
rs=r'c..t'
re.sub(rs,'python','csvt caat cvvt cccc') #结果'python python python cccc'
(2)subn()用法,返回值中比sub()多了一个数据,表示一共替换了多少次,比如
rs=r'c..t'
re.sub(rs,'python','csvt caat cvvt cccc') #结果('python python python cccc',3)
(3)split()的用法
s='121+334-34*33/44'
re.split(r'[\+\-\*/]',s) #结果['121','334','34','33','44']
6、编译标志-flags

Python学习 之 正则表达式的更多相关文章
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
- Python学习笔记——正则表达式入门
# 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...
- Python学习--16 正则表达式
正则表达式是一种描述性的语言,用来匹配字符串.凡是符合规则的字符串,我们认为就是匹配了. 正则表达式并非Python独有的,它与语言无关.很多语言都支持正则表达式. 我们经常用正则表达式来匹配电子邮件 ...
- python学习日记(正则表达式)
定义 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Pyth ...
- python学习笔记----正则表达式
正则: regular expression 常用的场景: #正则的包 >>> import re #match:开头匹配,匹配到,返回一个匹配对象,否则返回None >> ...
- python学习笔记——正则表达式regex
1 概述 1.1 定义 本质是由一系列字符和特殊符号组成的字串,用来表示一定规则的某一类字符串. 1.2 特点 正则表达式是一个独立的技术,其在多种编程语言中使用. 在python语言中的正则表达式模 ...
- Python学习 :正则表达式
正则表达式 python 使用正则表达式(re)来进行匹配引擎搜索 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串” 关于正则表达式 ...
- python 学习总结----正则表达式
正则表达式 应用场景 - 特定规律字符串的查找,切割,替换 - 邮箱格式:URl,IP地址等的校验 - 爬虫项目中,特定内容的提取 使用原则 - 只要使用字符串等函数能解决的问题,就不要使用正则 - ...
- python学习-53 正则表达式
正则表达式 就其本质而言,正则表达式是一种小型的/高度专业化的编程语言,它内嵌在python中,并通过RE模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 1.元字符 - ...
随机推荐
- Mondriaan's Dream(POJ 2411状态压缩dp)
题意:用1*2的方格填充m*n的方格不能重叠,问有多少种填充方法 分析:dp[i][j]表示i行状态为j时的方案数,对于j,0表示该列竖放(影响下一行的该列),1表示横放成功(影响下一列)或上一列竖放 ...
- 酷派8150S(移动定制版)可用的第三方Recovery备份数据、刷机并精简系统内置APK经验
希望使用的第三方Recovery下载地址: ClockworkMod ROM Manager - Recoveries http://clockworkmod.com/rommanager 适配的型号 ...
- Windows安装pomelo过程
安装总要出点状况的.操作系统是win7 64bit. 为了保证顺利,打开的是VS2012命令行提示.运行 npm install -g pomelo 经过一系列输出,最后安装提示完成了.但是输入 po ...
- PHP实现分页:文本分页和数字分页
来源:http://www.ido321.com/1086.html 最近,在项目中要用到分页.分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装. // 分页分装 /** * $pageT ...
- PackageManager获取版本号
PackageInfo代表的是关于一个包的所有信息,就相当于一个APP应用的清单文件中收集到的所有信息. 通过这个类我们就可以获取类似版本号等一些信息. /** * 得到应用程序的版本名称 */ pr ...
- 连分数(分数类模板) uva6875
//连分数(分数类模板) uva6875 // 题意:告诉你连分数的定义.求连分数,并逆向表示出来 // 思路:直接上分数类模板.要注意ai可以小于0 #include <iostream> ...
- ES 基础
You Know, for Search 安装es时 , jdk最低版本需要 jdk7 默认端口 : 9200 启动后浏览器访问 : localhost:9200 角色关系对照 elasticsear ...
- 【转】手把手教你利用Jenkins持续集成iOS项目
前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...
- Spring SimpleJdbcTemplate batchUpdate() example
In this tutorial, we show you how to use batchUpdate() in SimpleJdbcTemplate class. See batchUpdate( ...
- 转载 C#使用Salt + Hash来为密码加密
转载 http://www.csharpwin.com/csharpspace/13412r9615.shtml (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考 ...