re模块相关介绍
re模块
模块和实际工作时间的关系
time模块和时间是什么关系?
re模块和正则表达式的关系?
有了re模块就可以在python语言中操作正则表达式
正则表达式
1:什么是正则表达式?
一套规则---匹配字符串的
2:正则表达式能做什么?
1.检测一个输入的字符串是否合法-------web开发项目 表单验证
用户输入一个内容得时候,我们要提前做检测,能够提高程序的效率并且减轻服务器的压力
2.从一个大文件中找到所有符合规则的内容 ---日志分析\爬虫
能够高效的从一大段文字中快速找到符合规则的内容
3:正则规则
所有的规则中的字符就刚好匹配到字符串中的内容
在正则表达式中能够帮助我们表示匹配的内容得符号都是正则表达式中的元字符
元字符都是表示能匹配那些内容,一个元字符总是表示一个字符位置上的内容
1.字符组 [] 描述的是一个位置上能出现的所有可能性
[] 一个中括号只表示一个字符位置
如:匹配a或者b或者c
[0-9] 匹配数字
根据ASCII码表进行范围的比对
[a-zA-Z] 匹配大小写
2.匹配符号
\d -------->[0-9] 表示匹配一位任意的数字
\w -------->[0-9a-zA-Z_] 匹配数字字母下划线
\s --------->表示匹配空白符(空格\tab\enter)
空格 ----->
tab ----->\t
enter回车----->\n
\W ---------->表示匹配非数字字母下划线
\D --------->表示匹配非数字
\S --------->表示匹配非空白符
[\d\D] ----->表示匹配所有
. -------->表示除换行之外的所有
[^\d] 表示匹配非数字
\b表示单词的边界
^ ---------->表示匹配一个字符串的开始
$ ---------->表示匹配一个字符串的结尾
或 a表达式|b表达式
匹配a表达式或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配,所以,如果两个规则有重叠部分,总是把长的放在前面
分组 ()
约束|描述的内容的范围问题
3.量词
{n} 表示匹配n次
{n,} 表示匹配至少n次
{n,m} 表示至少匹配0次或1次
? 表示匹配0次或者1次
+ 表示一次或多次
* 表示0次或多次
4.贪婪匹配
在量词范围允许的条件下,尽量多的匹配内容
.*x 表示匹配任意字符 任意多次数 直至遇到最后一个x后才停下来
非贪婪匹配
元字符 量词 ? 表示非贪婪
元字符 ? 元字符匹配0次或1次
.*?x 表示匹配任意字符 任意多次数 但是一旦遇到x就挺下来
5.转义符
原本有特殊意义的字符,到了表达它本身的意义的时候需要转义
有一些特殊意义的内容,放在字符组中,会取消他的特殊意义
[().*?] 所有的内容放在字符组中会取消他的特殊意义
[a\-c] -在字符组中表示范围,如果不希望他表示范围,需要转义,或者放在字符组的最前面或者最后面
相关说明:
1.为啥要匹配0次
整数 \d+
小数 \d+\.\d+
小数或者整数
\d+(\.\d+)?
2. 匹配手机号码
1[3-9]\d{9}
判断用户输入的内容是否合法,如果用户输入的对就能查到结果,如果输入的不对就不能查到结果
^1[3-9]\d{9}$
从一个大文件中找到所有符合规则的内容
1[3-9]\d{9}
匹配18/15位的身份证,规则如下:
15位:1-9 15
[1-9]\d{14}
18位:1-9 16 0-9/x
[1-9]\d{16}[\dx]
15或18位的身份证
[1-9]\d{16}[\dx]|[1-9]\d{14}
re模块
import re
ret = re.findall("\d+","wrr432ee21r3tg")
print(ret) #找所有 返回一个列表
ret = re.search("\d+","fefrr32r445ergt56")
print(ret) #变量
pritn(ret.group()) #只能拿到一个,拿不到就报错
if ret:
print(ret.group())
预习一个现象并且找到答案 ---分组有关系()
#findall 还是按照完整的正则进行匹配,只是显示括号里面的匹配的内容
#取所有符合条件的,优先显示分组中的
ret = re.findall("8(\d)\d","1845dwfer35435")
print(ret) #4
print(ret)
#search还是按照完整的正则表达式进行匹配,显示也是显示匹配 到的第一个内容,但是我们可以通过给group方法传参数
#变量.group(n)的形式来指定获取n个分组中匹配到内容
ret = re.search("8(\d)(\d)","ewrr2123512343456")
print(ret)
if ret:
print(ret.group())
print(ret.group(1))
print(ret.group(2))
为啥在search中不需要分组优先,而在findall中需要
加上括号是为了对真正需要的内容进行提取
为什么要用分组,以及findall的分组优先到底有什么好处
exp = "3-2*(5+3)"
# a+b或者是a-b并且计算他们的结果
ret = re.search("\d+[+]\d+",exp)
print(ret)
a,b = ret.split("+")
print(int(a)+int(b))
ret = re.search("(\d+)[+](\d+)",exp)
print(int.group(1)+int.group(2))
如果我们要查找的内容在一个复杂的环境中
我们要查的内容并没有一个突出与众不同的特点,甚至会和不需要的杂乱的数据混合在一起
这个时候我们就需要把所有的数据统计出来,然后对所有的数据进行筛选,把我们真正需要的数据对应的正则表达式用()圈起来
ret = re.findall("1(\d)(\d)","133456")
print(ret)
取消分组优先:
ret = re.findall("1(?:\d)(\d)","effed") #取消分组优先?:
什么是爬虫
通过代码获取到一个网页的源码,要的是源码中嵌入的网页上的内容
import requests
ret = requests.get("https:// www.baidu.com").text()
分组和findall的现象
为什么要分组
把想要的内容放到分组里
如何取消分组优先
如果在写正则的时候由于不得已的原因 导致不要内容也得写在分组里
(?:)取消这个分组的优先显示
re模块相关介绍的更多相关文章
- 基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)
本篇继续<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>,继续介绍基于Metronic的Bootstrap开发框架的工作模块功能,介绍工作流模块中相关业务表单的界 ...
- tensorflow中slim模块api介绍
tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35 http://blog.csdn.net/guvcolie/article/details/77686 ...
- SONiC项目的发展及其相关介绍(转载)
SONiC作为一个开源项目,理论上是包含了SAI(switch abstraction interface,交换机抽象接口),SAI是没有开源的,厂商自己完成统一的API,提供给上层sonic用户来调 ...
- 转载:Nginx 相关介绍
转载自:https://www.cnblogs.com/wcwnina/p/8728391.html Nginx 相关介绍(Nginx是什么?能干嘛?) Nginx的产生 没有听过Nginx?那么 ...
- Vue 封装axios(四种请求)及相关介绍(十三)
Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...
- 寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- ppDelegate的相关介绍
// AppDelegate的相关介绍// IOS笔记 //@interface AppDelegate : UIResponder <UIApplicationDelegate>// ...
- 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输
002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...
- Android HttpClient HttpURLConnection相关介绍
Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...
- Winform开发框架中的内容及文档管理模块功能介绍
在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...
随机推荐
- ISP(图像信号处理)算法概述、工作原理、架构、处理流程
目录 ISP的主要内部构成: ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构: 1.ISP逻辑 2.运行在其上的firmware ISP上的Firmware ...
- https://www.cnblogs.com/DKSoft/category/608549.html
https://www.cnblogs.com/DKSoft/category/608549.html
- 【Asp.net】服务器控件<asp:TextBox ></TextBox>如何变为多文本控件
废话不多说,直接上图! 在TextBox上增加TextModel="MultiLine"即可!
- NOI 1.7编程基础之字符串
11:潜伏者 1.描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则: 1. S国军方内部欲发送的原信 ...
- 在windows 7下构建 FTP 服务器
首先我们在C盘建立两个文件夹,用于发ftp的上传和下载 其次我们找到控制面板>程序>打开或关闭windows功能 进入后找到Internet 信息服务>FTP服务器>确定! 选 ...
- LM393双电压比较器集成电路引脚图及功能_工作原理及应用电路
lm393简介 LM393 是双电压比较器集成电路.输出负载电阻能衔接在可允许电源电压范围内的任何电源电压上,不受 Vcc端电压值的限制.此输出能作为一个简单的对地SPS开路(当不用负载电阻没被运用) ...
- JS回文检查(FreeCodeCamp项目)
需求 如果传入的字符串是回文字符串,则返回 true. 否则返回 false 回文 palindrome,指在忽略标点符号.大小写和空格的前提下,正着读和反着读一模一样. 注意:检查回文时,你需要先去 ...
- linux 下安装部署redis
安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4. ...
- git diff如何确定差异所在函数context
问题 在使用git diff 展示c/c++文件修改内容时,除了显示修改上下文外,输出还贴心的展示了修改所在的函数.尽管这个展示并不总是准确,但是能够做到大部分情况下准确也已经相当不错:是不是git内 ...
- Hystrix-Dashboard可视化
Hystrix-Dashboard可视化 1.新建子项目引pom.xml <dependencies> <!--hystrix dashboard--> <depende ...