python模块--re模块

本文详细介绍正则表达式的常用模式,如字符匹配、数量限定符等,以及Python中re模块的基本操作,如match、search、findall等,帮助读者快速掌握正则表达式的使用。

常用的正则表达式模式:

. 匹配除换行符以外的任意字符
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、换页符等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\b 字符的开始或结束。\b\w{6}\b 匹配刚好6个字符的单词
^ 匹配字符串开头
$ 匹配字符串的结束
[^]  取反,匹配不在[]之中的字符, 例如 [^xyz] 匹配除了x,y,z以外的字符
[] [xyz],字符x或者y或者z
 匹配0个或1个
* 匹配0个或多个
+ 匹配1个或多个
   {} {m}重复m次,{m,}重复m到多次,{m,n}重复m到n次
() 分组
(?P<name>exp)   将exp匹配到的文本命名为name

 更多详细使用可参考:https://www.jb51.net/tools/zhengze.html

 

re.match   匹配字符串的开始,如果不符合则返回None

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

>>> re.match('[a-z]','1aaa')     # 没匹配到返回None
>>> re.match('[a-z]','a1aaa')
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match('[a-z]','a1aaa').group()   #group()匹配到的字符串
'a'
>>> re.match('[a-z]','a1aaa').span()
(0, 1)

re.search  匹配整个字符串,直到找到一个匹配

>>> re.search('[a-z]','1aaa')
<_sre.SRE_Match object; span=(1, 2), match='a'>

findall  匹配所有符合正则的字符串,以列表形式返回

>>> re.findall('[a-z]','ab11cd22ef33')   #匹配所有符合正则的字符串,并返回列表
['a', 'b', 'c', 'd', 'e', 'f']
>>> re.findall('[a-z]','123456')    #没有匹配到则返回空列表
[]
>>> pat = re.compile(r'\d+')
>>> pat.findall('aa 12 bb34 de')
['12', '34']
>>> pat.findall('aa 12 bb34 de56')
['12', '34', '56']
>>> 
>>> pat.findall('aa 12 bb34 de56',0,5)   
['12']

finditer   类似findall 将结果作为一个迭代器返回

>>> pattern = re.compile(r'\D+')
>>> i = pattern.finditer('ab-11cd22ef33')
>>> i
<callable_iterator object at 0x7f8fc4d38908>
>>> for x in i:
...      print(x)
... 
<_sre.SRE_Match object; span=(0, 3), match='ab-'>
<_sre.SRE_Match object; span=(5, 7), match='cd'>
<_sre.SRE_Match object; span=(9, 11), match='ef'>

compile 函数     编译正则表达式。

re.compile(pattern[, flags])

flags:匹配模式 re.I 忽略大小写  re.M 多行模式等

>>> pattern = re.compile(r'\D+')    # 先对正则进行编译,然后再匹配
>>> pattern.search('ab-11cd22ef33').group()
'ab-'
>>> pattern.search('ab-11cd22ef33',0,2).group()
'ab'
>>> 
>>> pattern.search('ab-11cd22ef33').start()
0
>>> pattern.search('ab-11cd22ef33').end()
3
>>> pattern.search('ab-11cd22ef33').span()
(0, 3)

 

split   按照正则匹配的子串将字符串分割并返回列表

>>> re.split(r'\*','a*b*c')
['a', 'b', 'c']

 

re.sub    查找替换

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

>>> re.sub(r'[^a-z]','*','ab11cd22ef33')
'ab**cd**ef**'
>>> re.sub('\D','*','ab11cd22ef33')
'**11**22**33'

(?P<name>exp)

>>> m = re.search('(?P<year>[0-9]{4})','this is 2018 yeara')
>>> m.group('year')
'2018'

>>> m = re.search('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})','test 2012/12 year haha')
>>> m.group()
'2018/08'
>>> m.group('year')
'2018'
>>> m.group('month')
'08'

 

转载于:https://www.cnblogs.com/xiaobaozi-95/p/9791728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值