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

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))

结果如图:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

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模块

20200127201616221.png

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

20200127210407503.png

1.2.2 匹配Regex对象

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

20200127210931388.png

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

1.3.1 利用括号分组

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

如果

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.3.2 利用管道匹配多个分组

字符

|

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

20200128140955891.png

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

20200128142401283.png

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.3.3 利用问号实现选择匹配

(字符串)?字符串

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

20200128184323465.png

还可以进行多模式匹配

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.3.4 利用星号实现匹配

利用

*

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.3.5 利用加号实现匹配

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.3.6 用花括号实现匹配

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.4 贪心匹配和非贪心匹配

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.5 findall()方法

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

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

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

(1)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

(2)

20200128223432831.png

1.6 字符分类

\d 0-9内的任意数字

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

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

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

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

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

20200129120944774.png

1.7 建立自己的字符分类

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

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

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

(3)还可以使用

^

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

(1)效果图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

(2)效果图

20200129130026668.png

(3)效果图

20200129130727574.png

1.8插入字符和美元字符

插入字符

^

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

$

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

20200129134109407.png

20200129134345722.png

以$为结尾的正则表达式

20200129135817131.png

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

20200129135552445.png

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

20200129140036375.png

1.9 通配字符

在正则表达式中,

.

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

20200129184332205.png

1.9.1 .* 匹配所有字符串

(星号)表示

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

注意大小写

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

(.

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

20200129200904441.png

<.

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

1.10 大小写不区分的匹配

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

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

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

20200129223221395.png

20200130112954818.png

1.12管理复杂的正则表达式

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGFuZ3poYW95YW5nLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70

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

20200130135846817.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络应用是学什么类型的,计算机网路中服务类型及应用

服务(service)这个极普通的术语在计算机网络中无疑是一个极重要的概念。在网络体系结构中&#xff0c;服务就是网络中各层向其相邻上层提供的一组操作&#xff0c;是相邻两层之间的界面。由于网络分层结构中的单向依赖关系&#xff0c;使得网络中相邻层之间的界面也是单向性的&…

oschina git服务, 如何生成并部署ssh key

1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxxxxxxx.com" # Generating public/private rsa key pair... # 三次回车即可生成 ssh key 查看你的 public key&#xff0c;并把他添加到码云&#xff08;Gitee.com&#xff09; SSH k…

需求调研报告模板_2020年工业软管行业深度市场调研及投资策略建议报告-液体化学品增加对其需求...

&#xff08;原标题&#xff1a;液体化学品市场规模增加 对工业软管需求量变大&#xff09;工业软管&#xff0c;又称为工业胶管。主要用于各行业各设备作软体连接的一种软管。相比民用软管&#xff0c;工业作业环境更复杂、更恶劣、设备对输送管的要求也更苛刻&#xff0c;因此…

计算机基础理论知识的论文,计算机基础毕业论文

计算机基础毕业论文随着科学技术的不断发展&#xff0c;计算机也开始人类在正常生活当中所应用的一个高新的技术。下面是小编整理的计算机基础毕业论文&#xff0c;欢迎来参考&#xff01;摘要&#xff1a;大学进行计算机教学能够对学生的创新能力进行培养&#xff0c;还能够使…

hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理

权限管理权限管理机制是 hyperledger fabric 项目的一大特色。下面给出使用权限管理的一个应用案例。启动集群首先现在相关镜像。$ docker pull yeasy/hyperledger:latest $ docker tag yeasy/hyperledger:latest hyperledger/fabric-baseimage:latest $ docker pull yeasy/hyp…

Python基础检测:20171105

第一周的预习结束了 效果并不理想,最后的检测也是有个别同学表现还可以.最后一次检测,除了依旧不是放在一个文件里,文件也没有标注作者从而导致我没办法一一回复外,有些问题写的不好意外.基本没什么毛病,摔! 本次问题是以小故事的形式展开并串联的,并没有什么特殊的意思.本人不…

python爬音乐网站_用 Python 爬取 QQ 音乐全部歌曲

前景介绍 最近小伙伴们听歌的兴趣大涨&#xff0c;网抑云综合症已经遍布各地。 咱们再来抬高一波QQ音乐的热度吧。 土豪充绿钻 和 刷永久绿钻的除外(me) 爬它 目标&#xff1a;https://y.qq.com/portal/singer_list.html 任务&#xff1a;将A到Z的歌手以及全部页数的歌存到本地…

8.String、StringBuffer、enum枚举

1.字符串相关类 1)string类代表不可变的字符系列。 2)stringBuffer,Buffer就是缓冲区&#xff0c;代表的是可变的字符系列。 这可变和不可变的是怎么理解呢&#xff1f; 如图&#xff0c;不是a的字符系列改变了&#xff0c;只是 开辟了一份新的内存&#xff0c;然后重新把a指向…

nacos启动_nacos微服务注册中心

nacos主要可作为微服务架构中 动态服务发现、服务配置、服务元数据及流量管理快速使用方法&#xff1a;&#xff08;k8s集群内&#xff09;1.下载包&#xff0c;并解压放到服务器&#xff0c;准备用dockerfile打包镜像FROM 192.168.0.200:5000/hifm-nacos:2.0.0 ADD startup.sh…

esp8266原理图_ESP32/ESP8266使用MicroPython控制DHT11/DHT22

背景知识视频教程高级ESP32 - 国外课栈​viadean.com使用NodeMCU&#xff08;由ESP8266支持&#xff09;&#xff0c;MicroPython和PyCharm进行物联网 - 国外课栈​viadean.com适用于使用ESP32/ESP8266的所有人的MicroPython&#xff08;入门&#xff09; - 国外课栈​viadean.…

如何将word中的对象怎么显示到工具栏_职场必备!Word实用技巧最全总结(五)...

1、 用目录快速定位目录通常是长文档不可缺少的部分&#xff0c;有了目录&#xff0c;阅读者就能很容易地知道文档中有什么内容&#xff0c;如何查找这些内容。下面介绍使用内部标题样式创建目录的方法&#xff1a;1、单击要建立目录的地方&#xff0c;通常是文档的最前面&…

html博客源码_5分钟搭建私人Java博客系统——Tale

本文适合刚学习完 Java 语言基础的人群&#xff0c;跟着本文可了解和运行 Tale 项目。示例均在 Windows 操作系统下演示本文作者&#xff1a;HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》[1]系列&#xff0c;今天给大家带来一款基于 Java 语言的轻量级博客开源项目——…

17秋 软件工程 团队第五次作业 Alpha Scrum2

17秋 软件工程 团队第五次作业 Alpha Scrum2 今日完成的任务 杰麟&#xff1a;Java后端的学习&#xff1b;世强&#xff1a;登录和注册接口编写&#xff1b;港晨&#xff1a;完成数据库表的设计&#xff1b;树民、陈翔&#xff1a;完成超级管理员后端框架。其余成员外出比赛。 …

运行返回签名不正确_如果调用约定不匹配,会发生什么?

蝎子信不信由你&#xff0c;调用约定不匹配是程序经常出问题的原因之一。当你的程序代码中出现不相匹配的调动约定的时候&#xff0c;编译器会”大吼大叫”&#xff0c;但是懒惰的程序员只会在其中进行强制转换&#xff0c;以使编译器”尽快闭嘴”。结果是&#xff1a;Windows不…

计算机硬件教学设计高中信息,重大版信息技术七上《计算机硬件系统》教学设计.doc...

重大版信息技术七上《计算机硬件系统》教学设计.doc文档编号&#xff1a;745134文档页数&#xff1a;3上传时间&#xff1a; 2019-09-19文档级别&#xff1a;文档类型&#xff1a;doc文档大小&#xff1a;33.00KB计算机硬件系统教学设计 知识目标 1、学生了解计算机组成各部分的…

html 循环_一个不被程序员认为是编程语言的语言——HTML,你怎么看?

HTML究竟算不算是一门编程语言&#xff0c;这是争执已久的话题。其实&#xff0c;从本质来讲&#xff0c;HTML确实算不上是一门编程语言。HTML全称&#xff0c;HyperText Markup Language。字面理解&#xff0c;HTML就是一种超文本语言&#xff0c;何谓超文本&#xff0c;就是其…

Java Web学习总结(10)学习总结-EL表达式

一&#xff0c;EL 表达式概述&#xff08;EL主要从域中取数据&#xff09; EL&#xff08;Express Lanuage&#xff09;表达式可以嵌入在jsp页面内部&#xff0c;减少jsp脚本的编写&#xff0c;EL出现的目的是要替代jsp页面中脚本的编写。 二&#xff0c;EL从域中取出数据(EL…

图片测量尺寸软件_3D扫描之工件测量检测

一&#xff0e;技术简介消费者追求品质和时尚的需求使制造领域发生了一系列变革&#xff0c;最明显的两点&#xff1a;一是产品外形增加了更多的曲面设计&#xff1b;二是产品的质量控制标准越来越严格。而这两点的变化又对检测行业提出了更高的要求&#xff0c;传统的测量或检…

input只能输入数字_Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧...

前言本文案例只适合新手&#xff0c;老司机请绕路。游戏介绍&#xff1a;程序自己有一个数字&#xff0c;用户输入一个数字&#xff0c;两个数字进行比较。知识点&#xff1a;input函数字符串while循环if条件判断语句break语句开始撸代码先来看看效果图代码# 1. 有一个数字 my_…

java 异或_Javase第一部分:操作符的使用(按位异或运算)(含视频讲解)

本套课程讲解详细深入&#xff0c;内容丰富,包含了数据结构、JVM、GC等大厂常见的面试知识精讲&#xff0c;而且配有在线的预习文档课堂笔记每天作业&#xff0c;可以缩短你的学习周期&#xff0c;提高学习效率。Java精讲视频六大板块----带你轻松入门Java​mp.weixin.qq.com本…