Python笔记(十):正则表达式
正则表达式对比工具
https://pan.baidu.com/s/1XIPyF1vFSj5PACPx9zW8_g
(一) 正则表达式符号和特殊字符
|
符号 |
说明 |
示例 |
|
| |
或 |
re1|re2,匹配re1或re2 |
|
. |
匹配任何字符(\n除外) |
|
|
^ |
匹配字符串开始部分 |
^ab.* 以ab开始的字符串,匹配ab123、ababc等等 |
|
$ |
匹配字符串结束部分 |
.*123$ 以123结束的字符串,匹配ab123、测试123等等 |
|
* |
匹配0次或多次前面的正则表达式 |
.* 匹配0次或多次前面的 . |
|
+ |
匹配1次或多次前面的正则表达式 |
|
|
? |
匹配0次或1次前面的正则表达式 |
|
|
{n} |
匹配n次前面的正则表达式 |
.{5} |
|
{m,n} |
匹配M到N次前面的正则表达式 |
.{1,10} |
|
[…] |
匹配[]里的任一字符 |
[abc]d 匹配 ad、bd、cd |
|
[x-y] |
匹配范围内的任一字符 |
[a-c]d:匹配 ad、bd、cd [0-9]d:匹配0d、1d、2d、3d等 |
|
[^…] |
不匹配[]里的任一字符 |
[^a-c]d: 不匹配 ad、bd、cd |
|
(…) |
将正则表达式封闭为一个组 |
例如:[a-b][a-b] :只匹配aa、ab等 ([a-b][a-b])+:匹配aaaa、abab等.另外可以用这个()来提取数据 |
|
符号 |
说明 |
示例 |
|
\d |
匹配任一数字,和[0-9]是一样的,\D则不匹配任何数字 |
A\d: 匹配A1、A2等 |
|
\w |
匹配任一数字、字母,和[A-Za-z0-9]是一样的,\W则相反 |
|
|
\s |
匹配任一空格字符,\S 则相反 |
hello\sword:匹配hello word |
|
\.. |
将\后一个字符按字面意义匹配,不匹配特殊含义 |
\?:匹配? \\d:匹配\d |
|
\b |
匹配任何单词边界(\B 则相反) |
例如:字符串 ab the Htherr the: 能匹配到2个 the \bthe\b:只匹配第一个 the \Bthe\B:只匹配第二个 the |
|
\A |
匹配字符串开始部分,\Z 则字符串结束部分 |
参照^ 和$ |
(二) 贪婪模式和非贪婪模式
贪婪模式:尽可能的匹配
非贪婪模式:匹配到第一个结果后就结束匹配。在*、+、?、{}后面加一个?就是非贪婪模式。(*|+|?|{})?
看下面2张图就清楚了(蓝色背景表示匹配的内容)
第一张图(贪婪模式):匹配到第一</div>后还会继续向右匹配。(在内容和正则表达式匹配的情况下,尽可能的匹配最长字符串)
第二张图(非贪婪模式):匹配到第一个</div>后就结束匹配了。(在内容和正则表达式匹配的情况下,匹配到第一个结果后就结束匹配)


(三) re模块
|
函数/方法 |
说明 |
re.compile(pattern, flags=0) |
(预编译)将正则表达式编译为对象(不是必须的,不过一般是会预编译) 实际应用中:下面2种方式都是可以用的 the_str='' 第一: 第二: 第一种是调用正则表达式对象的match()方法。 第二种写法是调用re模块的match()函数 |
match(pattern, string) |
Pattern:正则表达式 String:字符串 匹配成功,返回字符串,失败则返回None。 预编译后的正则表达式对象则只需要传str就行了(因为它本身就是pattern对象) |
|
search(pattern, string) |
Pattern:正则表达式 String:字符串 返回第一个匹配内容,没有匹配则返回None |
|
findall(pattern, string)
|
以列表形式返回所有匹配的内容 |
|
finditer(pattern, string) |
返回所有匹配的内容,以迭代器的形式 |
|
split(pattern, string) |
Pattern匹配的内容作为分隔符,split将字符串分割为列表并返回 |
|
flags参数 |
说明 |
re.I re.IGNORECASE |
不区分大小写 |
|
re.M re.MULTILINE |
匹配行的开始和结束部分,而不是严格匹配字符串本身的开始、结束部分 |
|
re.S re.DOTALL)
|
让. (点号)可以匹配\n |
使用flags参数的时候,不清楚传第几个参数的话,最好先去看下方法(函数)的实现代码。或者直接指定(flags= xxx)

(四) re模块示例
import re
the_str='<div id="hd_info"></div></div></div>'
href_regx= re.compile('<div.*</div>')
print('match()示例:',href_regx.match(the_str))
print('match()示例:',re.match('<div.*</div>',the_str))
print('search()示例:',re.search('/div>',the_str)) print('findall()示例:',re.findall('/div>',the_str))
print('finditer()示例:',re.finditer('/div>',the_str))
for i in re.finditer('/div>',the_str):
print('迭代finditer()返回值:',i) print('split()示例:',re.split('/.',the_str,re.DOTALL))

(五) 正则表达式实际应用
匹配电信手机号
133、149、153、173、177、180、181、189、199开头的11位数字
正则表达式:1(39|49|53|[7][37]|[8][019]|99)[0-9]{8}

匹配a标签开始 href属性值 (<a href='' )

Python笔记(十):正则表达式的更多相关文章
- Python:笔记(6)——正则表达式
Python:笔记(6)——正则表达式 re模块 re模块用于在字符串中执行基于正则表达式模式的匹配和替换. 使用原始字符串 正则表达式使用 \ 对特殊字符进行转义,比如,为了匹配字符串 ‘pytho ...
- python笔记十(列表生成式、字典生成式、生成器、生成器的并行)
一.列表生成式 列表生成式就是python设置的可以用来可以生成列表的. 如要生成一个0-9的列表我们可以通过以下代码实现: >>> list(range(10)) [0, 1, 2 ...
- guxh的python笔记十:包和模块
1,包和模块 包package:本质就是一个文件夹/目录,必须带一个__init.__.py的文件 模块module:.py结尾的python文件 2,导入方法 import pandas, coll ...
- Python笔记(十八)_私有属性、实例属性、类属性
私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...
- Python笔记(十五)_异常处理
try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...
- Python笔记(十四)_永久存储pickle
pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...
- python笔记十五(面向对象及其特性)
一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...
- python笔记十四(高阶函数——map/reduce、filter、sorted)
一.map/reduce 1.map() map(f,iterable),将一个iterable对象一次作用于函数f,并返回一个迭代器. >>> def f(x): #定义一个函数 ...
- python笔记十二(匿名函数)
一.匿名函数 有些情况下,我们需要把函数当做参数传入到另外的函数中,或者是把函数作为某个函数的返回值,此时我们就可以使用匿名函数. 匿名函数的标志是lambda. >>> f = ...
- Python笔记(十九)_继承
继承 继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写 多重继承 通过多重继承,一个子类就可以同时获得多个父类的所有功能 > ...
随机推荐
- Android使用内容提供者实现增删改查操作
Android使用内容提供者实现增删改查操作 这里需要建立两个项目:SiYouShuJuKu(使用内容提供者暴露相关的操作),DQDYGApplication(使用内容解析者对第一个应用进行相关的解析 ...
- ASP.NET MVC网站使用新浪微博账号登录
首先到http://open.weibo.com/development 注册一个开发者账号. 然后可以点微连接--网站接入 会分配App Key 和App Secret 然后点高级信息 在这里设置回 ...
- JavaScript -- Window-窗口坐标
-----029-Window-窗口坐标.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=& ...
- Google CodeJam 2016 round3-A.Teaching Assistant
题目描述: 原题是纯英文,大意是:你每天可以选择一门课去学习,选题和提交答案.题目为Coding或者Jamming.选的题目如果和老师选的一致,提交答案也匹配,最后可以得10分,若选题不一致只能得5分 ...
- vue导出excel数据表格功能
前端工作量最多的就是需求,需求就是一直在变,比如当前端数据写完之后,需要用Excel把数据下载出来. 第一步安装依赖包,需要把代码下载你的项目当中 cnpm install file-saver c ...
- 浏览器对CSS小数点的解析——坑
在写移动端项目时,为了将一个元素垂直居中,于是我将元素的高和行高设置成一样的,但是显示出来的结果,却让人不得其解,如下: 可以看到按钮的底部有一条缝隙,一开始以为是代码写错了,于是检查了一下,发现没啥 ...
- Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)
Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能! Web网站上的图片,视频等其它多媒体文件以及大文件,因 ...
- jdbc mysql driver 6.0.2
url = jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8&useLegac ...
- spinnaker自动发布k8s部署应用<一>
一.准备环境 !docker-ce---17.06.2-ce !k8s集群----1.11.1 !helm部署工具---helm-v2.10.0 !spinnaker-charts---spinnak ...
- MFC获取系统信息
一.获取系统时间 CString str,str2; CTime time; time = CTime::GetCurrentTime(); str = time.Format("%Y年%m ...