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 ...
随机推荐
- zabbix连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
要解决此错误,有两种解决方法: 1.将连接参数"host"的值由"localhost"改成"127.0.0.1": 2.按下面方法,在&qu ...
- Laravel 5.1 LTS 速查表
https://cs.laravel-china.org/# Artisan // 在版本 5.1.11 新添加,见 http://d.laravel-china.org/docs/5.1/autho ...
- SpringBoot中SpringMVC异常处理机制
声明 源码基于SpringBoot 2.3.12 前置知识 Tomcat异常处理机制 使用例子 原理简要介绍 先来看下Spring Boot中默认的处理行为,如果DispatcherServlet执行 ...
- fpga always赋值
- jmeter 添加断言和查看断言结果
在对应的请求下添加响应断言,这里我们添加响应文本来作为检查点,来检查上面的这个请求是否成功 断言和断言结果是成对出现的,是为了检查我们添加的断言是否验证成功,如下图,如果成功,里面就会有对应的结果,且 ...
- 【godis】skiplist
skiplist 前言:在看代码时看到 ZSKIPLIST_MAXLEVEL = 32,当时并不了解 ZSKIPLIST_P 的作用,想着用 2 分法不应该层数是 64 吗?书上和他人的代码都是基于 ...
- apk签名之后安装失败
Android Studio 3.0.1 很奇怪的一个现象,直接run的话可以成功,debug也可以,但是用签名打包之后,却安装失败,原来是打包的时候选错了.原来签名时,Signature Versi ...
- wrf-python离线安装
由于客户环境不能联网,python的插件库只能离线安装,wrf库的安装中踩了不少坑,特此记录. 1.官方插件库pypi.org只有压缩包,没有提供wheel,在线安装没有问题. 2.下载压缩包解压后, ...
- css动画-滚动通知
使用动画 <div class="horNotice"> <div class="horMove"> <span>累计87例 ...
- Codeforces Round #694 (Div. 1) - B. Strange Definition
数论 Problem - B - Codeforces 题意 给定 \(n\;(1<=n<=3*10^5)\) 个数 \(a[i]\), \(1<=a[i]<=10^6\) 把 ...