Python的Re库详解(正则表达式)

先贴一篇很好的正则表达式博文:https://www.cnblogs.com/darkterror/p/6474211.html

以及关于贪婪与懒惰匹配的博文:https://blog.csdn.net/wzygis/article/details/43339241

一.正则表达式的语法

1.正则表达式语法由字符和操作符构成。

2.正则表达式的常用操作符:

(1).             表示任何单个字符

(2)[ ]           字符集,对单个字符给出取值范围

(3)[^]          非字符集,对单个字符给出排除范围

(4)*            其哪一个字符0次或无限次扩展

(5)+           前一个字符1次或无限次扩展

(6)?         前一个字符0次或1次扩展

(7)|            左右表达式任意一个

(8){m}        扩展前一个字符m次(只对大括号前的一个字符进行扩展)

(9){m,n}     扩展前一个字符m至n次(含n)

(10)^          匹配字符串的开头          例:^abc表示abc且在一个字符串的开头

(11)$         匹配字符串结尾             例:abc$表示abc且在一个字符串结尾

(12)( )        分组标记,内部只能使用|操作符           例:(abc|def)表示abc,def

(13)\d         数字,等价于[0-9]

(14)\w        单词字符,等价于[A-Za-z0-9_]

 

二.Re库的基本使用

1.调用方式:import re

2.正则表达式的表示类型:

(1)raw string类型(原生字符串类型)

re库采用raw string类型表示正则表达式,表示为:r'text',raw string是不包含转义符的字符串

(2)string类型,更繁琐

3.当正则表达式包含转义符时,使用raw string

4.Re库主要功能函数:

(1)re.search():在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

(2)re.match():从一个字符串的开始位置匹配正则表达式,返回match对象

(3)re.findall():搜索字符串,以列表类型返回全部能匹配的子串

(4)re.split():将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

(5)re.finditer:搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素时match对象

(6)re.sub:在一个字符串中替换所有匹配字符串的子串,返回替换后的字符串

5.Re库的另一种等价用法:

(1)函数式用法:一次性操作

例:rst = re.search(......)

(2)面向对象用法:编译后的多次操作

pat = re.compile(r'[1-9]\d{5}')              #将一个正则表达式字符串变异成为正则表达式类型,python对象)

rst = pat.search('BIT 100081')            #用python对象调用search方法

6.正则表达式对象:

regex = re.compile(pattern, flags=0)          compile函数将正则表达式的字符串编译成正则表达式对象

 

三.Re主要功能函数详解

1.re.search(pattern, string, flags=0)

(1)pattern:正则表达式的字符串或原生字符穿表示

(2)string:带匹配的字符串

(3)flags:正则表达式使用时的控制标记

            re.I:忽略正则表达式大小写,[A-Z]能匹配小写字符

            re.M:正则表达式中的^操作符能够将给定字符串的每行当作匹配开始(本来^操作符只匹配字符串的串首,使用re.M后可以匹配字符串每行的行首

            re.S:正则表达式的.操作符能够匹配所有字符,默认匹配除换行符外的所有字符(设置re.s,可以匹配换行符)

2.re.match(pattern, string, flags=0)

3.re.findall(pattern, string, flags=0)

4.re.split(pattern, string, maxsplit=0, flags=0)

(1)maxsplit:最大分割数,剩余部分作为最后一个元素输出

5.re.finditer(pattern, string, flags=0)

6.re.sub(pattern, repl, string, count=0, flags=0)

(1)repl:替换匹配字符串的字符串

(2)count:匹配的最大替换次数

 

四.Re库的match对象

1.match对象的属性:

(1).string     带匹配的文本

(2).re          匹配时使用的pattern对象(正则表达式)

(3).pos       正则表达式搜索文本的开始位置

(4).endpos 正则表达式搜索文本的结束位置

2.match对象的方法

(1).group(0):获得匹配后的字符串

(2).start():匹配字符串在原始字符串的开始位置

(3).end():匹配字符串在原始字符串的结束位置

(4).span():返回(.start(), .end())

 

五.Re库的贪婪匹配和最小匹配

1.Re库默认采用贪婪匹配,即输出匹配最长的子串

例:match = re.search(r'PY.*N', 'PYANBNCNDN')

    match.group(0)

结果:PYANBNCNDN

分析:实际上在该原始字符串中,PYAN,PYANBN,PYANBNCN,PYANBNCNDN,都满足正则表达式,但结果输出了其中最长的PYANBNCNDN,这就叫贪婪匹配.

2.最小匹配:输出最短的字符串(在正则表达式中加一个?)

例;match = re.search(r'PY.*?N', 'PYANBNCNDN')

    match.group(0)

结果为:PYAN

3.最小匹配操作符:

(1)*?:前一个字符0次或无限次扩展,最小匹配

(2)+?:前一个字符1次或无限次扩展,最小匹配

(3)??:前一个字符0次或1次扩展,最小匹配

(4){m, n}:扩展前一个字符m至n次(含n),最小匹配

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值