Python---正则表达式和re模块常用函数

正则表达式(Regular Exception),使用单个字符串来描述,匹配一系列符合某个语句法则的字符串搜索模式

搜索模式可用于文本搜索和文本替换

正则表达式是由一个字符序列形成的搜索模式

当你在文本中搜索数据时,你可以使用搜索模式来描述你要查询的内容

正则表达式可以是一个简单的字符,也可以是一个复杂的模式

正则表达式可用于所有文本搜索和文本替换的操作。

在python中,通过内嵌成re模块,程序员可以直接调用来实现正则匹配,正则表达式被编译成一系列的字节码,然后由c编写的匹配引擎执行。

 

正则表达式的元字符:

·       匹配除换行符以外的任意字符
[0123456789] []是字符集合,表示匹配方括号中所包含的任意一个字符
[good]     匹配good中任意一个字符
[a-z]     匹配任意小写字母
[A-Z]     匹配任意大写字母
[0-9]    匹配任意数字
[0-9a-zA-Z] 匹配任意的数字和字母
[0-9a-zA-Z_]匹配任意的数字,字母以及下划线
[^good]        匹配除了good这几个字母以外的所有字符,中括号里的^称为脱字符,表示不匹配集合中的字符
[^0-9]        匹配所有的非数字字符
\d             匹配数字,效果同[0-9]
\D            匹配非数字字符,效果同[^0-9]
\w            匹配数字,字母和下划线,效果同[0-9a-zA-Z_]
\W            匹配非数字,字母和下划线,效果同[^0-9a-zA-Z_]
\s            匹配任意的空白符(空格、回车、换行、制表、换页),效果同[\r\n\t\f]
\S            匹配任意的非空白符,效果同[^\f\n\r\t]

 

^    首行匹配,和在[]里的^不是一个意思
$    行尾匹配
\A    匹配字符串开始,它和^的区别是,\A只匹配整个字符串的开头,即使在re.M模式下也不会匹配它行的行首
\Z    匹配字符串结束,它和$的区别是,\Z只匹配整个字符串的结束,即使在re.M模式下也不会匹配它行的行尾

\b    匹配一个单词的边界,也就是指单词和空格的位置
\B    匹配非单词边界

 

(xyz)    匹配小括号内的xyz(作为一个整体去匹配)
x?        匹配0个或者1个x
x*        匹配0个或者任意多个x(.*表示匹配0个或者任意多个字符(换行符除外))
x+        匹配至少一个x
x{n}    匹配确定的n个x(n是一个非负整数)
x{n,}    匹配至少n个x
x{n,m}    匹配至少n个最多m个x,注意n<=m
x|y        |表示或,匹配的是x或y

 

修饰符         描述
re.I              使匹配对大小写不敏感
re.L            做本地化识别(locale-aware)匹配
re.M           多行匹配,影响 ^ 和 $

re.S            使 . 匹配包括换行在内的所有字符
re.U             根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X             该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

 

re模块中常用的函数:

re.findall (正则表达式,字符串,flags=0默认)

功能:re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

 

re.complie(pattern,flags=0)

功能:编译正则表达式模式,返回一个对象模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样做的目的为了提高一点效率)

import re
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt))   #查找所有包含'oo'的单词

>>>['good', 'cool']

 

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

 

决定re是否在字符串的开始的位置进行匹配

注意:这个方法并不是完全匹配,当pattern结束时若string还有剩余字符,仍然视为匹配成功

想要完全匹配可以在表达式末尾添加边界匹配符“$”

import re
print(re.match("com",'Comwww.runcomoob',re.I).group())
print(re.match("com",'Comwww.runcomoob',re.I))

>>>Com

>>><_sre.SRE_Match object; span=(0, 3), match='Com'>

 

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

在字符串中查找模式匹配,只要找到第一个匹配然后返回,若没有找到匹配则返回None

import re
print(re.search('\dcom','www.4comrunoob.5com').group())

>>>4com

 

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

搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器,找到RE匹配的所有子串,并把他们作为一个迭代器返回。

import re
iter = re.finditer(r'\d+','12 drumm44ers drumming, 11 ... 10 ...')
for i in iter:
    print(i)
    print(i.group())
    print(i.span())

执行结果如下:
<_sre.SRE_Match object; span=(0, 2), match='12'>
12
(0, 2)

 

re.split(pattern,string[,maxsplit])

按照能够匹配子串将string分割后返回列表

import re
print(re.split('\d+','one1two2three3four4five5'))

>>>['one', 'two', 'three', 'four', 'five', '']

 

re.sub(pattern,repl,string,count)

使用re替换string中每一个匹配的子串后返回替换后的新串

import re
text = "Bob is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))

>>>Bob-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...

 

 

re.match() 、re.search()、re.findall()的区别:

re.match只匹配字符串的开始,re.search匹配整个字符串,返回第一个匹配结果re.findall整个字符串,返回所有的匹配结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值