python基础知识14-正则表达式
1.正则表达式
正则可以代替其他任何工具,但是其他工具不能完全代替正则.
1.匹配或提取字符串的工具,基于所有语言之上的工具.
正则表达式所面向的问题
判断一个字符串是否匹配给定的格式,如判断用户注册账号是否满足格式.
从一个字符串中按指定格式提取信息.抓取页面中的链接.
判断用户提交的邮箱的格式是否正确:
一个或多个字母或数字@一个或多个字母或数字.com,r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\ . com$'
import re #导包
res = re.findall(r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+ \ . com$','3002881567@qq.com') #能匹配的转化为列表项目.
注意:如果正则表达式中使用了括号,那么findall函数匹配的结果只会是括号中的内容,而不是完整的匹配.
因此我们可以利用这种机制来完成对需要部分数据的提取.
一个函数:re.findall(pattern,string) #
mymail = re.findall(r'aaa',mystr) #第一个参数是正则表达式,第二个参数是要查找的字符串内容.
2.元字符
本身具有特殊含义的字符:
^ 脱字符
一些元字符: . * ? + [ ] () \ ^ $
通过 \ 转义来匹配这些字符本身.
写正则的规则不要随便加空格
\ 转义符,转义正则表达式的规则
r 转义的python字符串,需要两层转义.
通过()来改变findall的行为
. 点代表任意一个字,强制占位,必须有一个字符.
锚点元字符
功能锁定行首, ^ 位置放在行首
功能锁定行尾 $ 位置放在行尾
单词边界(不是元字符): \b
a = 'hello world i am abcd today i say helloworld'
mymail = re.findall(r'\bhello\b',a) #只匹配到一个hello,因为后面的hello在单词中.
3.重复元字符
大括号{}来控制次数,修饰前面的字符.
a = 'abbbbbbbbc'
mymail = re.findall(r'ab{8}c') , {8}表示前面的b有8个, {2,8}表示可以匹配2到8个之间.{2,}表示后面2到正无穷.前面不写表示最多8个,即0-8个.包括空字符(其实是其他字符的位置)也会匹配.不要在{}中随意加空格.
[0-9]表示数字0到9
除此之外还有三个比较特殊的代表次数的 * + ?
mymail = re.findall(r'',str)
*代表 0 到正无穷 ,修饰前面的字符规则{0,}
+代表1到正无穷.{1,}
?代表不能多于一个,如果多于一个就匹配不到.{0,1}
N个{N}
M~N个:{M,N}
至少M个{M,}
4.贪婪与非贪婪
加问号变成非贪婪模式,尽可能少的去匹配字符.
非贪婪:在元字符后面加一个?,就可以变成非贪婪模式. 与在规则后面加问号不同.
任意多个:*?
一个或多个:+?
一个或没有: ??
规则+元字符+贪婪
mystr = 'abbbb'
mymail = re.findall(r'ab*?',mystr)
5.| 选择元字符,
a = 'happy today i am happy hahaha'
mymail = re.findall(r'happy|haha|today',a)
6.字符组 [ ]
[abc],整个中括号相当于一个字符,查找其中的一个,一个一个位置分开匹配.两个中括号相当于2个字符.
[0-9]{3},用大括号来控制次数.表示3个数字.
[A-Za-z0-9]表示大小写加数字,可表示邮箱或者首字母的命名规范.
不可以随意加逗号,只有在大括号{}表示区间的时候加逗号.
7.反向字符类 [^]
如果脱字符^写在字符组外面,代表锁定行首
如果写在字符组里面,代表反向字符类,(即 除括号内字符之外)
字符组[...] 反向字符类:...
有一对(),代表只会提取括号里面的内容.括号外面的当作一个标记
转义\,取消某些特殊字符的含义,让其变成普通字符.
mymail = re.findall(r'href = "(.*?)"',mystr),括号代表只提取括号里面的内容,外面的只是标记.
还有re.match,代表从开头开始匹配.
re.search ,代表任意位置只匹配一个,找不到就返回NONE,只匹配第一个
re.sub 替换, re.sub(r'href', 'haha', mystr),比字符串的replace好用.原本的字符串替换成新的字符串.
8.预定义字符组问题引入
\d \D 任意数字\非数字字符组
\s \S任一空白,非空白字符
\w \W 任一字母数字\非字母数字字符
记法:上下左右除去a.
python基础知识14-正则表达式的更多相关文章
- python基础知识(正则表达式)
使用正则表示式分割字符串 split() re.split(pattern,string,[maxsplit],[flags]) re.split(指定一个模式字符串,要匹配的字符串,最大的拆分次数, ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python基础知识的学习和理解
参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base python基础知识笔 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python基础知识小结-运维笔记
接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...
- python基础知识部分练习大全
python基础知识部分练习大全 1.执行 Python 脚本的两种方式 答:1.>>python ../pyhton.py 2. >>python.py #必须在首行 ...
- python基础之坑爹正则表达式
python基础之坑爹正则表达式 概述 re模块就是python语言中的正则表达式,拆出来单独写一条blog是因为正则表达式本身就是比较庞大的知识,写具体些让自己以后方便查找. IP: ^(25[0- ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
随机推荐
- .Net Core应用框架Util介绍(二) 转
Util的开源地址 https://github.com/dotnetcore/util Util的开源协议 Util以MIT协议开源,这是目前最宽松的开源协议,你不仅可以用于商业项目,还能把Util ...
- 洛谷 P1042 乒乓球
P1042 乒乓球 var s:string; a1:array[1..50000] of char; i,n,x,y:longint; procedure f1; begin while not e ...
- 542 01 Matrix 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离.两个相邻元素间的距离为 1 .示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0 示例 2:输入: ...
- STM32使用注意事项
一 IO引脚: 1.1 PC13~PC15作为IO输出的限制,PC13/PC15输出最大2MHZ,负载2PF,驱动电流不超过3mA,所以不能用来驱动LED. 2 输出的引脚是否可以用来读引脚: cas ...
- Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则
1.那么我们再来看我们需要的访问方式,如下图 如果我们要访问Admin下的TestController里面的Index页面,那么我们输入Test/Index,这个肯定不行的.因为TestControl ...
- # bug 查找 (一) 快速记录 IE8 下三个问题
bug 查找 (一) 快速记录 IE8 下三个问题 昨天 pc 端网站上灰度,发现多个在 IE8 下的问题,描述和解决方案如下: 第一个问题是 css 文件过大 现象 把项目所有的 css 打包成单个 ...
- mirror.js 整合redux的好工具
mirror.js 很简单,让state管理更方便了,没有新增api,值 得使用 https://github.com/yurizhang/mirror package.json { "na ...
- 2189 数字三角形W
2189 数字三角形W 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 数字三角形要求走到最后mod 100最大 输入描述 ...
- 初学者应该怎么学习前端?web前端的发展路线大剖析!
写在最前: 优秀的Web前端开发工程师要在知识体系上既要有广度和深度!应该具备快速学习能力. 前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础知识,而且要学会运用 ...
- Vivado增量式编译
Vivado 中的增量设计会重新利用已有的布局布线数据来缩短运行时间,并生成可预测的结果.当设计有 95% 以上的相似度时,增量布局布线的运行时间会比一般布局布线平均缩短2倍.若相似度低于80%,则使 ...