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. POJ 3254:Corn Fields

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9295   Accepted: 4940 Descr ...

  2. 从PC厂商狠抓粉丝经济看,春天将至?

    10月中旬,市场研究机构IDC发布的全球三季度PC出货量报告显示,第三季度全球个人电脑出货量总计6740万台,比去年同期下降0.9%.似乎这一数据的发布,依旧在证明着PC市场的颓势.但在这样的大背景下 ...

  3. 使用git提交远程仓库

    git pull    更新 git add 文件名   将文件添加到暂存区 git commit -m ‘注释’   提交 git push origin master   提交到远程仓库

  4. eclipse中使用jstl

    错误提示为"can not find the tag library for http://java.sun.com/jsp/jstl/core" 这是我在练习把axis2和普通j ...

  5. 一百零五、SAP中ALV事件之十七,让ALV表格修改后保存到数据库

    一.我们来到代码界面设置保存按钮的代码 二.i_grid_settings这个属性用来编辑单元格之后,返回给程序编辑后的值 三.我们双击点  'REUSE_ALV_GRID_DISPLAY',来到定义 ...

  6. 六十九、SAP中内表插入的三种方法之三,INSERT的使用,用于指定位置插入

    一.代码如下 二.需要注意的时候,如果内表和工作区同名,这可以用隐式插入,不需要什么工作区INTO到什么表,INDEX为位置,效果图如下:

  7. net GC 学习以及问题

    引用对象必要空间开销:对象指针.同步块索引 GC重要点: 每个应用程序包含一组根,每个根都是一个存储位置,其中包含指向引用类型对象的一个指针,该指针要么指向托管堆中的要给对象,要么为null.(这句话 ...

  8. ES6 新特性(笔记)

    1.定义变量     let         a).块作用域 , 不同于var的函数作用域         b).不可以重复定义同一个变量名           注:              {} ...

  9. 【转载】WebDriver拾级而上·之零 WebDriver理论

    Selenium2.0 = Selenium1.0 + WebDriver(也就是说Selenium2.0合并了这两个项目)   Selenium1.0可以使用任何编程语言,但是有个先决条件就是必须支 ...

  10. 洛谷 P2516 [HAOI2010]最长公共子序列

    题目传送门 解题思路: 第一问要求最长公共子序列,直接套模板就好了. 第二问要求数量,ans[i][j]表示第一个字符串前i个字符,第二个字符串前j个字符的最长公共子序列的数量 如果f[i][j]是由 ...