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模块)的更多相关文章

  1. Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速

    Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...

  2. Python开发【第十三篇】高阶函数、递归函数、闭包

    函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输 ...

  3. python学习三十四天函数高阶函数定义及用法

    python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...

  4. Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。

    1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...

  5. Python笔记_第四篇_高阶编程_魔法(术)方法详解(重载的再详解)

    1. 魔法方法是什么? 魔法方法(Magic Method)是Python比较独特的应用,它可以给你的类增加特殊的方法,如果你的对象实现了(重载),这些方法中的某一个,就会被Python所调用.正如装 ...

  6. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数

    1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...

  7. Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门

    1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...

  8. Python笔记_第四篇_高阶编程_进程、线程、协程_4.协程

    1.协程的概念: 子程序或者子函数,在所有语言中都是层级调用,比如A调用B,再B执行的过程中又可以调用C,C执行完毕返回,B执行返回,最后是A执行完毕返回.是通过栈来实现的,一个线程就是执行一个自称, ...

  9. Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程

    1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...

  10. Python笔记_第四篇_高阶编程_进程、线程、协程_1.进程

    1. 多任务原理: 现代操作系统,像win,max os x,linux,unix等都支持多任务. * 什么叫做多任务? 操作系统可以同时运行多个任务. * 单核CPU实现多任务原理? 操作系统轮流让 ...

随机推荐

  1. POJ1611 && POJ2524 并查集入门

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 28293   Accepted: 13787 De ...

  2. linux下nginx的安装和配置

    准备目录 [root@sqh ~]# mkdir /usr/local/nginx [root@sqh ~]# cd /usr/local/nginx 添加一些支持和依赖 1.安装gcc 安装redi ...

  3. iphone 面试题(转)

    转]iPhone 面试题解答 2011-07-20 0:51 转载自  492437598 最终编辑  492437598 1.main()  {     int a[5]={1,2,3,4,5};  ...

  4. 分享一个简单的C#的通用DbHelper类(支持数据连接池)

    每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 <connectionStrings> <add ...

  5. HttpServletRequest HttpServletResponse接口详解

    HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求 ...

  6. python+opencv+dlib瘦脸效果

    对实现人脸瘦脸简单功能的一个记录,大概流程如下: 1.使用dlib检测出人脸关键点 2.使用Interactive Image Warping 局部平移算法实现瘦脸 参考:https://blog.c ...

  7. Node.js NPM Package.json

    章节 Node.js NPM 介绍 Node.js NPM 作用 Node.js NPM 包(Package) Node.js NPM 管理包 Node.js NPM Package.json Nod ...

  8. css 基础知识 (待完善...)

    CSS   1.position 属性     对元素进行定位.       absolute         相对于 非static类型的position 的 第一个(临近的) 父元素 进行定位. ...

  9. 装饰者模式(Decorator Pattern)C#版本的

    仍然来自 zhili https://www.cnblogs.com/zhili/p/DecoratorPattern.html 谢谢啊 呵呵 ---------------------------- ...

  10. POJ 1068:Parencodings

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22849   Accepted: 13394 De ...