1.1 不用正则表达式来匹配文本

假设我希望在一个字符串中找到电话号码,电话号码的格式为三个数字,一个短横线,四个数字,一个短横线,四个数字 比如:131-3310-5293和132-2670-9864

def IsTruePhoneNumber(content):

if(len(content))!=13: #首先判断号码长度是否超过13,算上短横线长度

return False

for i in range(0,3): #判断前三位字符是否为数字

if not content[i].isdecimal():

return False

if content[3]!='-': #判断第四位字符是否为短横线,不是则返回错误

return False

for i in range(4,8):

if not content[i].isdecimal():

return False

if content[8]!='-':

return False

for i in range(9,13):

if not content[i].isdecimal():

return False #python里面严格区分False和True的首字母大写

return True

account='Please call me at 131-3310-5293 and my another telephone number is 132-2670-9864'

for i in range(len(account)):

number=account[i:i+13]

if IsTruePhoneNumber(number):

print('Phone Number is '+number)

print('It is accomplished')

#print('There will be a piece of phonenumber:')

#print(IsTruePhoneNumber(content))

结果如图:

1.2 用正则表达式查找文本模式

正则表达式,简称为regex

,是文本模式的描述方法。例如,\d 是一个正则表达式,表示一位数字字符,即表示任何一位 0 到 9 的数字。Python 使用正则表达式 \d\d\d-\d\d\d-\d\d\d\d,来匹配前面的函数IsTruePhoneNumber()与之相对应的同样文本:3 个数字、 一个短横线、4个数字、1个短横线、4 个数字。所有其它字符串都不能匹配 \d\d\d-\d\d\d\d-\d\d\d\d 正则表达式。

正则表达式可以更加复杂

,添加一个用得着的功能,比如在一个模式后面添加花括号\d{3},意思为匹配这个模式三次,可以应用在配对密码方面

1.2.1创建正则表达式对象

Python中所有的正则表达式都在re模块中,所以必须先通过import来引入re模块

向re模块中的re.compile()中创建一个字符串作为参数来表示正则表达式,此时将返回一个regex对象,比如,创建一个regex对象来匹配上一个IsPhoneTRUENumber()函数

1.2.2 匹配Regex对象

Regex的research()方法用来寻找与正则表达式匹配的所有对象,如果没有找到,research()方法将返回None,显示错误。如果找到,search()方法将返回一个Match对象。Match对象有一个group()方法用来返回寻找到的已匹配的文本

1.3 用正则表达式匹配更多模式

1.3.1 利用括号分组

假如分离电话号码中的运营商号段,前三位可以区别是哪个运营商,电信,联通或者移动,可以将号码分为两段。正则表达式作为参数的字符串中的第一对括号是第 1 组,第二对括号是第 2 组。通过 group() 方法匹配对象传入整数1或2,就可以取得匹配文本的不同部分。向 group()方法传入0或不传入参数,将返回整个匹配的文本。

如果想要一次性得到分离的两段字符串,就可以利用groups()方法,也可以采用两个变量来利用groups()方法分别赋值第一段和第二段

如果

需要在正则表达式中添加括号,则可以用转义字符\

1.3.2 利用管道匹配多个分组

字符

|

称为管道,用来匹配多个分组中的一个时,类似于C语言中的或,就可以使用它来进行此项操作,但是返回的是第一个匹配到的对象

也可以用来匹配多个模式中的一个,作为正则表达式的一部分,比如:everywhere,everyone,everytime,everyday。提取它们共同的前缀 every(如果需要匹配换到字符,则添加倒斜杠 |)

1.3.3 利用问号实现选择匹配

(字符串)?字符串

为选择模式,即添加?前面的或者不添加问号前面的。?即匹配这个?前的分组零次或一次。比如:

还可以进行多模式匹配

1.3.4 利用星号实现匹配

利用

*

实现匹配*前面的分组零次或多次

1.3.5 利用加号实现匹配

利用+实现分组匹配,即+前的分组出现一次或多次,至少出现一次,如果未出现,则返回None

1.3.6 用花括号实现匹配

花括号可以规定分组的匹配次数,不符合要求则返回空或者规定的最大模式匹配次数的模式,分组中只能包含要求匹配的模式,否则返回空

格式为(模式){匹配次数} 比如(模式){3,5}则表示模式匹配次数从3到5 (){,5}则表示模式匹配次数从0到5 (){3,}则表示模式匹配次数为从3到更多次数

1.4 贪心匹配和非贪心匹配

贪心匹配尽可能匹配最多的实例,非贪心匹配尽可能匹配最少的实例

非贪心匹配在花括号后加?(问号)在正则表达式末尾加,或者是你想选择的模式后加

1.5 findall()方法

Regex对象除了有search()方法,还有findall()方法,search()方法返回的是第一次匹配正则表达式的模式,findall()方法返回的是正则表达式匹配到的所有模式。

(1)如果正则表达式中没有分组,则返回的为包含字符串的列表

(2)如果正则表达式中有分组,则返回的是包含元组的列表

(1)

(2)

1.6 字符分类

\d 0-9内的任意数字

\D 除0-9内的任意数字

\w 任何字母、数字或下划线字符

\W 除字母、数字或下划线以外的任何字符

\s 空格、制表符或换行符

\S 除空格、制表符或换行符以外的任何字符

正则表达式\d+\s\w+匹配的文本有一个或多个数字(\d+),不加加号默认为匹配一个,接下来是一个空白字 符(\s),接下来是一个或多个字母/数字/下划线字符(\w+)。findall()方法将返回所有匹 配该正则表达式的字符串,放在一个列表中。

1.7 建立自己的字符分类

可以使用方括号来建立自己想匹配的正则表达式,格式为[匹配模式]

(1)也可以使用短横线来划定范围,比如[0-99a-zA-Z],表示为从0到99,从a到z的所有小写字母,A到Z的所有大写字母

(2)在方括号内,普通的正则表达式符号不会被解释,不需要加转义字符,可以直接使用,例如 [0-5,]不需要这样写,直接写为[0-5,]

(3)还可以使用

^

来表达非字符类,比如[^ban]来表示为匹配除ban以外的字符

(1)效果图

(2)效果图

(3)效果图

1.8插入字符和美元字符

插入字符

^

表示模式从文本开始处匹配,美元字符

$

表示文本以该模式结束,插入字符和美元字符同时使用意味着该文本等于该正则表达式,如果不匹配则不返回

以$为结尾的正则表达式

同时以^和$结尾的正则表达式

正则表达式 '^\d+$'表示整个文本为数字

1.9 通配字符

在正则表达式中,

.

(句点)字符称为“通配符”。它匹配除了换行之外的所有字符。. 字符只能代替一个字符

1.9.1 .* 匹配所有字符串

(星号)表示

以前的字符出现零次或多次,.(句号)表示匹配除换行外的所有字符,即匹配所有字符串

注意大小写

(.

?)意味匹配尽可能小的模式

<.

>意为“匹配一个左尖括号,接下来是任意字符,接下来是一个右尖括号”,匹配尽可能多的模式。加问号匹配尽可能少的模式

1.9.2 利用句点字符匹配换行(re.DOTALL)

如果不加re.DOTALL,则只匹配换行符以前的。加re.DOTALL后,则匹配所以字符串

1.10 大小写不区分的匹配

在验证图片中字母的时候,只涉及匹配字母,不关心它们是大写或小写。要让正则表达式 不区分大小写,可以向 re.compile()传入 re.IGNORECASE 或 re.I,作为第二个参数。

1.11 利用sub()方法替换字符串

正则表达式不但可以找到文本模式,而且可以用新的文本替换掉这些模式。Regex 对象的 sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串,即 正则表达式,用于匹配需要找到的字符串。sub()方法返回替换完成后的字符串。

1.12管理复杂的正则表达式

如果要匹配的文本模式很简单,正则表达式就很好。但匹配复杂的文本模式, 可能需要长的、复杂的正则表达式。你可以告诉 re.compile(),忽略正则表达式字符串中的空白符和注释,从而缓解这一点。要实现这种详细模式,可以向 re.compile() 传入变量 re.VERBOSE,作为第二个参数。

例如:只需在正则表达式每行后面加 #注释即可

1.13 组合使用类似变量re.IGNORECASE,可以使用管道符

python中正则表达式的默认匹配方式为_Python模式匹配与正则表达式相关推荐

  1. python中正则表达式的默认匹配方式为贪婪匹配_python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用...

    先引入一下百度百科对于正则表达式的概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则 ...

  2. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

  3. python正则表达式匹配网址中的域名_匹配 IP 地址与域名的正则表达式

    一个完整的域名,由根域.顶级域.二级.三级--域名构成,每级域名之间用点分开,每级域名由字母.数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过63. 单独的名字可以由正则表达式[a-z ...

  4. python中match方法返回字符串的长度_Python re模块与正则表达式详解

    Python 中使用re模块处理正则表达式,正则表达式主要用来处理文本中的查找,匹配,替换,分割等问题:我们先来看一个问题,切入正则表达式. 问题: 匹配字符串,最少以3个数字开头.使用Python代 ...

  5. python中字符abc_python3 正则匹配[^abc]和(?!abc)的区别(把多个字符作为一个整体匹配排除)...

    目的:把数字后面不为abc的字符串找出来 如1ab符合要求,2abc不符合要求 1 str = '1ab' 2 out = re.match(r'\d+(?!abc)',str)3 4 str1 = ...

  6. Python中的迭代器,生成器(yield语句),正则表达式,re模块

    目录 一.定义一个生成器: 二.模拟range函数的功能,自己建立一个range:MyRange 三.re模块中函数的使用(正则表达式) 一.定义一个生成器: 要求:生成1-10的数字,使用next( ...

  7. python读取csv文件的方法-CSV文件在Python中的几种处理方式

    Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...

  8. CSV文件在Python中的几种处理方式

    Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...

  9. python中cfg_python操作cfg配置文件方式

    *.cfg文件一般是程序运行的配置文件,python为读写常见配置文件提供了一个ConfigParser模块,所以在python中解析配置文件相当简单,下面就举例说明一下具体的操作方法. 写文件代码: ...

最新文章

  1. 第 7 章 项目运作
  2. 实例教程八:采用ListView实现数据列表显示
  3. 二阶齐次线性微分方程的通解可以表示成两个线性无关解的线性组合
  4. 删除计算机插优盘记录,如何彻底清除U盘在PC里的使用记录呢
  5. 计算机视觉中的Transformer的最新进展!
  6. 深入分析Nginx 502 Bad Gateway和Nginx 504 Gateway Time-out
  7. 微鉴道长SLAM学习笔记(目录)
  8. C#实例.net_经典例子400个
  9. CTGU实验6_1-创建能否借书存储过程
  10. 计算机视觉 常用坐标系一览
  11. [附源码]计算机毕业设计Python保护濒危动物公益网站(程序+源码+LW文档)
  12. 微信小程序页面跳转,url传参参数丢失问题
  13. 千万同时在线直播聊天室架构演进
  14. 计算机组成原理最难的是,计算机组成原理最后冲刺重难点梳理_跨考网
  15. /*CDATA*/介绍
  16. 活动 支付、退款相关的订单测试
  17. 基于Linux搭建一个类似Qik手机录像直播平台(服务器端:feng streaming server + web server,客户端:Android手机应用)
  18. 王强:要用一生读好这7类书
  19. c语言最长递增子序列nlogn,十月常见算法考题、最长递增子序列,Leetcode第300题最长上升子...
  20. 几张一模一样的照片_一个人持有两个真实的身份证 照片看上去一模一样

热门文章

  1. creo外观库_Proe软件技巧,颜色库下载及其使用方法揭晓
  2. HTML+CSS+JS实现 ❤️canvas手机刮刮乐女朋友效果❤️
  3. HTML+CSS+JS实现 ❤️新型冠状病毒射击小游戏❤️
  4. 3 配置ftp文件服务器,03-FTP和TFTP配置
  5. mysql 获取年预提,【判断题】正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限。...
  6. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...
  7. oracle form中实现隐藏,Oracle Form数据块实现同时只有一个人锁定修改数据
  8. arcgis加载dwg显示一个点_Arcgis添加控制点配准校正影像,更新校正之后,其他软件打开之后,影像位置没有校正解决办法...
  9. android 播放器 反交错,反交错- 视频横纹处理
  10. Redis事务回滚深入