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实现多任务原理? 操作系统轮流让 ...
随机推荐
- 八十二、SAP中的ALV创建之一,新建一个程序
一.创建一个ALV的程序 二.填写程序属性 三.保存到本地对象 四.来到代码区,这样一个新工程就创建好了,我们后续来写相关的创建代码
- 040-PHP使用闭包函数来进行父实例的变量自增,正确示例
<?php // 如何使用闭包函数来进行父实例的变量自增 function demo(){ $num = 1; # 给use的变量加个&符合,就能改变对应参数的域的限制 $func = ...
- HDU 4921 Map DFS+状态压缩+乘法计数
算最多十条链,能截取某前缀段,每种方案都可以算出一个权值,每种方案的概率都是总数分之一,问最后能构成的所有可能方案数. 对计数原理不太敏感,知道是DFS先把链求出来,但是想怎么统计方案的时候想了好久, ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-refresh
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- express连接数据库 读取表
connection 连接数据库 connection.query 查询表 1.依赖 const mysql = require('mysql'); 连接数据库代码 var connecti ...
- java的JDBC的事务学习
https://www.cnblogs.com/chy18883701161/p/11372089.html
- no_string_attached笔记
下载附件以后,在终端中查看 第一次调试时发现权限不够 接着,返回文件夹,修改该目标权限 然后进行调试 使用info reg 查看寄存器的值 发现eflags寄存器为0x282,然后x/282 $ea ...
- POJ 3295:Tautology
Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10482 Accepted: 3982 Descri ...
- oracle 的存储过程
-----推荐视频 https://ke.qq.com/webcourse/index.html#course_id=292495&term_id=100346599&taid= ...
- java web实现在线编辑word,并将word导出(三)
前面说到前台呈现的页面是img标签,因此需要在后台生成相应的图片,在img的src内容中改为相应的路径地址:而在生成文档的过程中需要替换相应的img标签.后一部分上篇文章已经讲过,本片主要讲前一部分. ...