正则表达式:Python3中的应用简介

一、正则表达式

1,概述

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。

2,表达式列表

表达式

说明

字符匹配

[0-9]

匹配0-9之间的任意1个数字

[a-z]

表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[a-z]"匹配"a"与"z"之间的任何1个小写字母。

[A-Z]

表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[A-Z]"匹配"A"与"Z"之间的任何1个大写字母。

元字符匹配

.

匹配换行符以外的任何字符。

\w

与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"

\s

与任何白字符匹配,包括空格、制表符、分页符等。等价于"[\f\n\r\t\v]"。

\d

与一个数字字符匹配。等价于[0-9]。

\n

与换行符字符匹配。

\t

与制表符匹配。

\b

与单词的边界匹配,即单词与空格之间的位置。例如,"er\b"与"never"中的"er"匹配,但是不匹配"verb"中的"er"

^

匹配输入的开始位置。

$

匹配输入的结尾

\W

与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。

\D

与非数字的字符匹配。等价于[^0-9]。

\S

与任何非空白的字符匹配。等价于"[^\f\n\r\t\v]"。

x|y

匹配x或y。例如"z|food"可匹配"z"或"food"。"(z|f)ood"匹配"zood"或"food"。

()

群组,与模式匹配并记住匹配。匹配的子字符串可以从作为结果的Matches集合中使用Item[0]... [n]取得。如果要匹配括号字符(和),可使用"\("或"\)"。

[xyz]

一个字符集。与括号中字符的其中之一匹配。例如,"[abc]"匹配"plain"中的"a"。

[^xyz]

一个否定的字符集。匹配不在此括号中的任何字符。例如,"[^abc]"可以匹配"plain"中的"pl".

量词

*

匹配前一个字符零次或几次。例如,"zo*"可以匹配"z"、"zoo"。

+

匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。

?

匹配前一个字符零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。

{n}

n为非负的整数。匹配恰好n次。例如,"o{2}"不能与"Bob中的"o"匹配,但是可以与"foooood"中的前两个o匹配。

{n,}

n为非负的整数。匹配至少n次。例如,"o{2,}"不匹配"Bob"中的"o",但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。

{n,m}

m和n为非负的整数。匹配至少n次,至多m次。例如,"o{1,3}"匹配"fooooood"中前三个o。"o{0,1}"等价于"o?"。

3,表达式应用区别

(1).^${}的区别

正则表达式

待匹配字符

匹配结果

说明

张.?

张杰和张天策和张三小子

张杰

张天

张三

?表示重复零次或一次,即只匹配"李"后面一个任意字符

张.*

张杰和张天策和张三小子

张杰和张天策和张三小子

*表示重复零次或多次,即匹配"李"后面0或多个任意字符

张.+

张杰和张天策和张三小子

张杰和张天策和张三小子

+表示重复一次或多次,即只匹配"李"后面1个或多个任意字符

张.{1,2}

张杰和张天策和张三小子

张杰和

张天策

张三小

{1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,在一个量词后面加?号使其变成惰性匹配

正则表达式

待匹配字符

匹配结果

说明

张.*?

张杰和张天策和张三小子

惰性匹配

(2)字符集[ ] [ ^ ]

正则表达式

待匹配字符

匹配字符

说明

张[杰天策三小子]*

张杰和张天策和张三小子

张杰

张天策

张三小子

表示匹配"李"字后面[杰莲英二棍子]的字符任意次

张[^和]*

张杰和张天策和张三小子

张杰

张天策

张三小子

表示匹配一个不是"和"的字符任意次

[\d]

456bdha3

4

5

6

3

表示匹配任意一个数字,匹配到4个结果

[\d]+

456bdha3

456

3

表示匹配任意个数字,匹配到2个结果

(3)转义符\

在正则表达式中,有很多有特殊意义的是元字符,比如\d和\s等,如果要在正则中匹配正常的"\d"而不是"数字"就需要对"\"进行转义,变成'\\'。

在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\d",字符串中要写成'\\d',那么正则里就要写成"\\\\d",这样就太麻烦了。这个时候我们就用到了r'\d'这个概念,此时的正则是r'\\d'就可以了。

正则表达式

待匹配字符

匹配结果

说明

\d

\d

False

因为在正则表达式中\是有特殊意义的字符,所以要匹配\d本身,用表达式\d无法匹配

\\d

\d

True

转义\之后变成\\,即可匹配

"\\\\d"

'\\d'

True

如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次

r'\\d'

r'\d'

True

在字符串之前加r,让整个字符串不转义

(4)贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配。

正则表达式

待匹配字符

匹配结果

说明

默认为贪婪匹配模式,会匹配尽量长的字符串

<.*?>

加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串

几个常用的非贪婪匹配模式:

*? 重复任意次,但尽可能少重复+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复

.*?的用法:

. 是任意字符*是取 0 至 无限长度

? 是非贪婪模式。

何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:

.*?x

就是取前面任意长度的字符,直到一个x出现

二、RE模块

1,re函数方法总结

方法名称

格式

说明

findall

re.findall(表达式,字符串)

返回所有满足匹配条件的结果,放在列表里

search

re.search(表达式,字符串).groups()

函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,

该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None

match

re.match(表达式,字符串).groups()

同search,不过尽在字符串开始处进行匹配

split

re.split(表达式,字符串)

按表达式对字符串分割,返回列表

sub

re.sub(表达式,替换字符,字符串,count)

按表达式类型替换成新的字符,返回字符串

subn

re.subn(表达式,替换字符,字符串,count)

按表达式类型替换成新的字符串,返回一个元组,存放这替换结果和替换次数

compile

re.compile(表达式)

将正则表达式编译成为一个 正则表达式对象

finditer

re.finditer(表达式,字符串)

finditer返回一个存放匹配结果的迭代器

2,常用方法实例

#(1)findall

importre

ret= re.findall('\d','adsf123456we7we') #匹配字符串中是数字的字符,并将匹配值返回到列表中

print(ret)'''结果:

['1', '2', '3', '4', '5', '6', '7']'''

#(2)search

ret = re.search('\d','adsf123456we7we').group() #按照表达式匹配到第一个值就返回

print(ret)'''结果:

1'''

#(3)match

ret = re.match('\w','adsf123456we7we').group() #按照表达式匹配开头第一个值,符合的话就返回,不符合就报错

print(ret)'''结果:

a'''

#(4)sub

ret = re.sub('\d','*','adsf123456we7we',0) #匹配字符串中的数字,并且替换成*号,0表示替换所有

print(ret)'''结果:

adsf******we*we'''

#(5)subn

ret = re.subn('\d','*','adsf123456we7we',0) #匹配字符串中的数字,并且替换成*号,返回一个元组,存放这替换结果和替换次数

print(ret)'''结果:

('adsf******we*we', 7)'''

#(6)compile

obj = re.compile('\d') #将正则表达式编译成一个正则表达式对象

ret = obj.search('ads123asd456').group()print(ret)'''结果:

1'''

#(7)finditer

ret = re.finditer('\d','adsf451we15615adf16') #finditer返回一个存放匹配结果的迭代器

print(ret)for i inret:print(i.group())

正则表达式在python中的应用_正则表达式:Python3中的应用简介相关推荐

  1. python3中format方法_[翻译]python3中新的字符串格式化方法-----f-string

    从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...

  2. python2中的unicode_python2中的unicode()函数在python3中会报错:

    python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...

  3. python如何把二进制转文本_在python3中如何把文本转换为二进制

    在python3中如何把文本转换为二进制 在python3中把文本转换为二进制的方法:首先修改dirroot为要读取的文件夹的路径:然后遍历所有的文件夹,读取txt文件:最后更改newdirroot为 ...

  4. [转载] python获取set中某些元素_取集合中元素_Python Set集合

    参考链接: Python set集合 copy() Set集合 阅读本文需要3分钟 2019.09.05 集合(set)是一个无序不重复元素的序列.基本功能是进行成员关系测试和删除重复元素.可以使用大 ...

  5. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  6. python怎么横着输出_对python3中, print横向输出的方法详解

    对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...

  7. python图像隐写_在图像中隐藏数据:用 Python 来完成图像隐写术

    什么叫"隐写术"? 隐写术是将保密信息掩藏在更大的信息内容中,使他人没法了解掩藏信息内容的存有及其掩藏信息的全过程.隐写术的目地是确保彼此中间的商业秘密沟通交流.与掩藏保密信息內容 ...

  8. python嵌入到程序_在应用中嵌入Python:转

    前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更合适的功能.这可以有很多 ...

  9. 哪些不符合python语言变量名_以下选项中不符合 Python 语言变量命名规则的是( )_学小易找答案...

    [单选题]下列各项中,关于银行存款业务的表述中正确的是( ).(2012年) [单选题]下列各项中,关于企业无法查明原因的现金溢余,经批准后应贷记的会计科目是( ). [多选题]计价软件中,在人材机汇 ...

  10. python删除字符串中重复字符_删除字符串中重复字符python 用CAD怎么画DNA反向

    用CAD怎么画DNA反向平行双螺旋结构绘螺旋线时,用选扭曲,确定顺时针. 画双头螺旋线时,第二根螺旋线底圆起点与第一根螺旋线底圆起点,可用角度分隔如180°.python去除文本中重复的字符串可有可无 ...

最新文章

  1. Android @id和@+id 以及 @android:id 的区别
  2. 树——常用的数据结构
  3. vue-cli 自定义指令directive 添加验证滑块
  4. java B锁_Java中15种锁的介绍
  5. C# 数据适配器之 DataAdapter 对象
  6. 基于ZooKeeper实现HA高可用性以及自动主备切换
  7. 特斯拉自动驾驶遭遇中国性价比强敌!纽劢(mài)L3方案发布,成本1万3
  8. Panel中加入3个 按钮,按钮上分别显示打开,关闭,返回
  9. python输入一系列的值_python中的input()和print()输入输出函数应用实例笔记
  10. 关于OMC链接LANSWITCH
  11. AUTOCAD——样条曲线命令
  12. mt管理器主题修改教程_QQ主题+微博主题
  13. 北大公开课-计算概论
  14. VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化
  15. ES6.x版本单机三节点配置discovery.zen.ping.unicast.hosts 错误
  16. 路由器:分类、定义及标准
  17. java数据类型有哪些(给博主倒一杯卡布奇诺)
  18. “五小”成果技术报告 野外小队信息管理系统Ver1.00
  19. 负载均衡进阶:SLB常见问题解决方法
  20. hadoop暂时永久关闭安全模式

热门文章

  1. VS2017 远程调试linux(centos).net core
  2. DUBBO服务启动过程
  3. CentOS 7 service systemnctl
  4. 初识设计模式之--简单工厂
  5. configparser读取含有中文的配置(Windows)
  6. Firebug 教程
  7. LeetCode Count of Smaller Numbers After Self
  8. 一次http请求中的信息
  9. Easyui 中获取DataGrid中所有数据
  10. 优客365 v2.9版本 后台存在SQL注入