博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用内置模块(11):正则表达式、re模块
阅读量:3592 次
发布时间:2019-05-20

本文共 2082 字,大约阅读时间需要 6 分钟。

 

 

 

一、正则表达式

.                 任何单个字符

[]                字符集。比如[abc]表示a、b、c

[^ ]             非字符集。比如[^abc]表示不是a或b或c的字符

\d               数字。等价于[0-9]

\w              单词字符。等价于[A-Za-z0-9_]

 

 

 

 

 

 

二、re库

2.1 常用函数

#查找

re.findall(pattern, string, flags=0)         #搜索所有匹配结果,返回列表的形式。找不到,则返回空列表。

re.search(pattern, string, flags=0)        #搜索第一个匹配的结果。返回的是Match对象。

re.match(pattern, string, flags=0)         #类似于字符串中的startwith方法。搜索开头是不是匹配。返回的是Match对象。

re.finditer(pattern, string, flags=0)        #搜索所有匹配的结果。返回一个迭代器,遍历迭代器可以得到一个个Match对象。

 

#替换

re.sub(pattern, repl, string, count=0, flags=0)      #类似于字符串中的replace方法。替换。在string中匹配pattern,然后替换成repl。

 

#切分

re.split(pattern, string, maxsplit=0, flags=0)        #类似于字符串中的split方法,都是将一个字符串拆分成子字符串的列表。

 

 

 

2.1.1  re.findall()

re.findall(pattern, string, flags=0)      #搜索所有匹配结果,返回列表的形式【例1】。找不到,则返回空列表。【例2】

 

参数flags如下:

常用的就是re.I,可以忽略大小写。【例3】

 

 

【例1】

结果:

 

 

【例2】

 

结果:

 

【例3】

 

结果:

 

 

2.1.2 re.search()

re.search(pattern, string, flags=0)           #搜索第一个匹配的结果。返回的是Match对象【例1】。如果匹配不到,则返回None.【例2】

 

 

Match对象是一次匹配的结果,包含匹配的很多信息:

 

 

【例1】

 

结果:

 

【例2】

 

结果:

 

 

 

2.1.3 re.match()

re.match(pattern, string, flags=0)            #类似于字符串中的startwith方法。搜索开头是不是匹配。返回的是Match对象。【例1】

 

 

例1:

 

结果:

 

 

 

2.1.4 re.finditer()

re.finditer(pattern, string, flags=0)           #搜索所有匹配的结果。返回一个迭代器,遍历迭代器可以得到一个个Match对象。【例1】

 

 

例1:

 

结果:

 

2.1.5 re.sub()

re.sub(pattern, repl, string, count=0, flags=0)           #类似于字符串中的replace方法,返回替换后的字符串。【例1】

 

pattern:要替换的串

repl:        替换成的串

string:     待匹配的字符串

count:     匹配的最大替换次数。【例2】

 

 

例1:

结果:

 

例2:

 

结果:

 

 

2.1.6 re.split()

re.split(pattern, string, maxsplit=0, flags=0)               #类似于字符串中的split方法,都是将一个字符串拆分成子字符串的列表。【例1】【例2】

 

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

 

 

例1:

 

结果:

 

例2:

 

结果:

!和空格中间有一个空字符。

 

例3:

 

结果:

 

 

 

 

2.2 re库的另一种用法

2.1中是直接使用函数。但是还有一种方法更常用,就是首先使用re.compile()函数,将正则表达式的字符串形式编译成正则表达式对象,然后再使用这个对象的函数。

这样的话,就可以一次编译,多次操作。更好一点。

 

步骤一:regex = re.compile(pattern, flags=0)

步骤二:调用regex的方法,有:

 

例:

 

结果:

 

 

2.3 贪婪匹配

如果同时匹配到长度不同的多项,返回哪一个呢?

Re库默认采用贪婪匹配,即输出匹配最长的子串。【例1】【例3】

 

如何输出最短的子串呢?【例2】【例3】

 

 • 只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配

 

 

例1:

 

结果:

 

 

例2:

 

结果:

 

 

例3:

 

结果:

 

 

2.4 分组

分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。

 

注意:group(0)是整个匹配的结果,也就是不分组时的结果。

          group(1)才是第一组的结果。

          groups()是所有组的结果,放到了一个元组中。

 

 

例如:如果想把区号从匹配的电话号码中分离,可以添加括号在正则表达式中创建分组,再使用group()方法,从一个分组中获取匹配的文本。

 

结果:

 

 

 

 

 

 

 

 

 

 

转载地址:http://xqown.baihongyu.com/

你可能感兴趣的文章
[2006年NOIP普及组] 数列
查看>>
[2011年NOIP普及组] 数字反转
查看>>
[2008年NOIP普及组] ISBN号码
查看>>
[2010年NOIP普及组] 数字统计
查看>>
计算多项式的值
查看>>
甲流疫情死亡率
查看>>
计算并联电阻的阻值
查看>>
计算三角形面积
查看>>
计算线段长度
查看>>
大象喝水
查看>>
Java 查找特定的值
查看>>
Java 向量点积计算
查看>>
C语言 数组逆序重放
查看>>
统计字符数
查看>>
吝啬的国度
查看>>
7-4 二进制数转十进制数(20 分)
查看>>
6-3 '字符串02-字符串复制(赋值) (10 分)
查看>>
6-4 带头结点的链式表操作集 (20 分)
查看>>
7-1 字符串替换 (15 分)
查看>>
MySQL的简单操作命令
查看>>