Python笔记_第四篇_高阶编程_正则表达式_1.正则表达式简介(re模块)
1. 从一个判断手机号的问题引入:
如果给你一个字符串,去判断是否是一个手机号码,我们通过之前的学习可以有如下代码:
# 如果用普通的方式去检验一个电话号码非常麻烦。
def checkPhone(str):
if len(str) != :
return False
elif str[] != "":
return False
elif str[:] != "" and str[:] != "":
return False
for i in range(,):
if str[i] < "" or str[i] > "":
return False
return True print(checkPhone(""))
print(checkPhone(""))
print(checkPhone("1391234a678"))
print(checkPhone(""))
print(checkPhone(""))
# True
# False
# False
# False
# False
从这个代码中我们可以看到过于繁琐,因此我们引入正则表达式的概念(regular express)
2. 正则概述:
正则语言是一种简单的寄宿语言,在大多数的语言当中都会有。因此py在1.5以后增加了re模块,提供了正则表达式模式。库名“import re”。
re模块:这个模块使py语言拥有了全部的正则表达式的功能。
正则语言其实就是一种对于查找内容的元字符表达。
3. re.match()、re.search()、re.findall():
这三个函数主要是匹配正则表达式的。其中.span()是这些函数下面的一个方法,返回一个元组用于保存找到的位置的下标。
3.1 re.match()函数:
原型:re.match(pattern,string,flags=0)
参数:
pattern:要匹配的正则表达式
strings:要匹配的字符串
flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:
re.I:忽略大小写
re.L:做本地化识别
re.M:多行匹配,影响^和$
re.S:使.(点)匹配包括换行符在内的所有字符
re.U:根据Unicode字符集解析字符,影响\w \W \b \B
re.X:以更灵活的格式理解正则表达式
功能:尝试从字符串的起始位置,匹配一个模式,如果不是起始位置匹配成功的话,也会返回None值,也就是说要从头开始匹配。只看头。
实例1:简单举例,查看一个网址前面是否有www
# 简单的举例,看一下一个网址前面是否有www
# www.baidu.com
# 扫描整个字符串,返回从其实位置成功的匹配。 print(re.match("www","www.baidu.com"))
# <re.Match object; span=(, ), match='www'> print(re.match("www","ww.baidu.com"))
# 找不到返回:None print(re.match("www","baidu.wwwcom"))
# 找不到返回:None,因为要从头开始匹配 print(re.match("www","wwW.baidu.com",flags=re.I))
# 匹配模式忽略大小写,能够查到
# <re.Match object; span=(, ), match='wwW'> print(re.match("www","www.baidu.com").span())
# (, ),返回字符串对应的位置
3.2 re.search()函数:
原型:re.search(pattern,string,flags=0)
参数:
pattern:要匹配的正则表达式
strings:要匹配的字符串
flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:
re.I:忽略大小写
re.L:做本地化识别
re.M:多行匹配,影响^和$
re.S:使.(点)匹配包括换行符在内的所有字符
re.U:根据Unicode字符集解析字符,影响\w \W \b \B
re.X:以更灵活的格式理解正则表达式
功能:扫描整个字符串,并返回第一个成功匹配,并不是从头匹配。只看第一个。
实例2:
print(re.search("Thomas","Thomas good man is Thomas!Thomas is nice"))
# <re.Match object; span=(, ), match='Thomas'>
# 返回的是第一个成功匹配的位置(,)
# 其他例子如上(略)
3.3 re.finall()函数:
原型:re.findall(pattern,string,flags=0)
参数:
pattern:要匹配的正则表达式
strings:要匹配的字符串
flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:
re.I:忽略大小写
re.L:做本地化识别
re.M:多行匹配,影响^和$
re.S:使.(点)匹配包括换行符在内的所有字符
re.U:根据Unicode字符集解析字符,影响\w \W \b \B
re.X:以更灵活的格式理解正则表达式
功能:扫描整个字符串,并返回结果列表。看所有的,只要有全部列出来。
实例3:
print(re.findall("Thomas","good man is Thomas!Thomas is nice",re.X))
# <re.Match object; span=(, ), match='Thomas'>
# ['Thomas', 'Thomas']
# 其他例子如上(略)
Python笔记_第四篇_高阶编程_正则表达式_1.正则表达式简介(re模块)的更多相关文章
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- Python开发【第十三篇】高阶函数、递归函数、闭包
函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输 ...
- python学习三十四天函数高阶函数定义及用法
python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...
- Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。
1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...
- Python笔记_第四篇_高阶编程_魔法(术)方法详解(重载的再详解)
1. 魔法方法是什么? 魔法方法(Magic Method)是Python比较独特的应用,它可以给你的类增加特殊的方法,如果你的对象实现了(重载),这些方法中的某一个,就会被Python所调用.正如装 ...
- Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...
- Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门
1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_4.协程
1.协程的概念: 子程序或者子函数,在所有语言中都是层级调用,比如A调用B,再B执行的过程中又可以调用C,C执行完毕返回,B执行返回,最后是A执行完毕返回.是通过栈来实现的,一个线程就是执行一个自称, ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程
1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_1.进程
1. 多任务原理: 现代操作系统,像win,max os x,linux,unix等都支持多任务. * 什么叫做多任务? 操作系统可以同时运行多个任务. * 单核CPU实现多任务原理? 操作系统轮流让 ...
随机推荐
- POJ 3254:Corn Fields
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9295 Accepted: 4940 Descr ...
- 从PC厂商狠抓粉丝经济看,春天将至?
10月中旬,市场研究机构IDC发布的全球三季度PC出货量报告显示,第三季度全球个人电脑出货量总计6740万台,比去年同期下降0.9%.似乎这一数据的发布,依旧在证明着PC市场的颓势.但在这样的大背景下 ...
- 使用git提交远程仓库
git pull 更新 git add 文件名 将文件添加到暂存区 git commit -m ‘注释’ 提交 git push origin master 提交到远程仓库
- eclipse中使用jstl
错误提示为"can not find the tag library for http://java.sun.com/jsp/jstl/core" 这是我在练习把axis2和普通j ...
- 一百零五、SAP中ALV事件之十七,让ALV表格修改后保存到数据库
一.我们来到代码界面设置保存按钮的代码 二.i_grid_settings这个属性用来编辑单元格之后,返回给程序编辑后的值 三.我们双击点 'REUSE_ALV_GRID_DISPLAY',来到定义 ...
- 六十九、SAP中内表插入的三种方法之三,INSERT的使用,用于指定位置插入
一.代码如下 二.需要注意的时候,如果内表和工作区同名,这可以用隐式插入,不需要什么工作区INTO到什么表,INDEX为位置,效果图如下:
- net GC 学习以及问题
引用对象必要空间开销:对象指针.同步块索引 GC重要点: 每个应用程序包含一组根,每个根都是一个存储位置,其中包含指向引用类型对象的一个指针,该指针要么指向托管堆中的要给对象,要么为null.(这句话 ...
- ES6 新特性(笔记)
1.定义变量 let a).块作用域 , 不同于var的函数作用域 b).不可以重复定义同一个变量名 注: {} ...
- 【转载】WebDriver拾级而上·之零 WebDriver理论
Selenium2.0 = Selenium1.0 + WebDriver(也就是说Selenium2.0合并了这两个项目) Selenium1.0可以使用任何编程语言,但是有个先决条件就是必须支 ...
- 洛谷 P2516 [HAOI2010]最长公共子序列
题目传送门 解题思路: 第一问要求最长公共子序列,直接套模板就好了. 第二问要求数量,ans[i][j]表示第一个字符串前i个字符,第二个字符串前j个字符的最长公共子序列的数量 如果f[i][j]是由 ...