python中的refind_python笔记-正则表达式

正则表达式匹配

\d 匹配一个数字

\w 匹配一个字母或一个数字

\s 匹配一个空格或tab空白符

\b 匹配字符边界

\\s 匹配任何空白字符,包括空格、制表符、回车\r、换行\n

以上特殊字符变成大写,表示与之相反。

\N 匹配已保存的子组

^或\A 匹配字符串的开始

$或\Z 匹配字符串的结束

.  匹配任意一个字符

.*? 惰性匹配,表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。如:a.*?b,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab

个数

+ 表示其前面的字符串至少出现了一次

? 表示其前面的字符出现了一次或零次

* 表示其前面的字符出现了任意次,可能是零次、一次或多次

{n} 表示其前面的字符串出现了n次

{n,m} 可以表示其前面的字符串出现了n-m次

[] 匹配一个范围,例如[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线,[]中以^开头表示"非"

转义

\ 表示转义

r'' 引号中的特殊字符会被转义(建议使用这种,不用考虑转义问题)

re模块

match()方法    判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。常见语法如下:str = '用户输入的字符串'

re.match(r'正则表达式',str,flags)

例如:import re

find1 = re.match(r'\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}','127.0.0.1')

print("find1:%s,%s"%(find1,find1.group()))

#打印内容

find1:<_sre.sre_match>,127.0.0.1

search()方法     在指定的字符串中,查找第一个能够匹配成功的字符串,如果匹配成功,返回一个Match对象,否则返回None。常见语法如下:str = '用户输入的字符串'

re.search(r'正则表达式',str,flags)

例如:str = 'my phone is 15810740000 ,my friend\'s phone is 12346010473'

find2 = re.search(r'\d{11}',str)

print("find2:%s,%s"%(find2,find2.group()))

#打印内容

find2:<_sre.sre_match>,15810740000

findall()方法    在指定的字符串中,查找所有匹配成功的字符串,如果匹配成功,返回一个列表,包含所有匹配成功的字符串,否则返回空列表。常见语法如下:str = '用户输入的字符串'

re.findall(r'正则表达式',str,flags)

例如:str = 'my phone is 15810740000 ,my friend\'s phone is 12346010473'

find3 = re.findall('\d{11}',str)

print("find3:%s"%find3)

#打印内容

find3:['15810740000','12346010473']

finditer()方法    与findall类似,只不过返回的是个callable_iterator迭代器,python2中支持next方法去遍历,python3中不支持。常见语法如下:str = '用户输入的字符串'

re.finditer(r'正则表达式',str,flags)

例如:str = 'my phone is 15810740000 ,my friend\'s phone is 12346010473'

find4 = re.finditer('\d{11}',str)

for i in find4:

print("find4:%s,%s"%(i,i.group()))

#打印内容

find4:<_sre.sre_match>,15810740000

find4:<_sre.sre_match>,12346010473

sub()、subn()方法    搜索和替换,sub返回替换后的字符串,subn返回一个元组,元素分别是替换后的字符串和替换的个数。如果没有正确的匹配替换,将返回原字符串,常见语法如下:str = '用户输入的字符串'

re.sub(r'正则表达式',repl,str,count=0)

re.subn(r'正则表达式',repl,str,count=0)

#使用repl替换正则表达式在str中匹配的部分,如果指定count个数,将替换对应的个数,否则将全部替换

例如:str = 'my phone is 15810740000 ,my friend\'s phone is 12346010473'

sub1 = re.sub('(\d{11})',r'+86 \1',str)

print("sub1:%s"%(sub1))

sub2 = re.subn('(\d{11})',r'+86 \1',str)

print("sub2:%s,共替换%s处"%(sub2))

#打印内容

sub1:my phone is +86 15810740000 ,my friend's phone is +86 12346010473

sub2:my phone is +86 15810740000 ,my friend's phone is +86 12346010473,共替换2处

注:在sub1、sub2正则表达式中都用了一个'\1',表示的就是匹配的字符串。

'(\d{11})'用了小括号,表示分组,'\1'表示分组的编号,这里只有一对小括号(一组),'\1'对应的就是全部匹配字符串。

split()方法与字符串分割的方法类似,但是功能更加强大,常见语法如下:str = '用户输入的字符串'

re.split('正则表达式',str,maxsplit=0)

#指定maxsplit个数只分割对应的个数,不指定将全部分割。python2中该参数为max

例如:str = 'root:x:0:0:root:/root:/bin/bash'

print(re.split(':',str,maxsplit=5))

#打印内容

['root', 'x', '0', '0', 'root', '/root:/bin/bash']

补充:

匹配对象的方法group(num=0)和groups()    group()返回匹配对象整个匹配的结果,对于含有子组的匹配对象来说,指定num,将返回对应的子组;groups()返回一个元组,包含匹配的每个子组,如果没有成功匹配,返回一个空元组,例如:import re

str = '158107470000@163.com'

reg = r'(\w+)@(\w+).com'

find1 = re.match(reg,str)

print(find1.group(),find1.group(1),find1.group(2))

print(find1.groups())

#打印内容

158107470000@163.com 158107470000 163

('158107470000', '163')

通过group(1)、group(2)这种指定索引打印某个子组外,还可以为每个子组指定一个组名,通过group('组名')来打印某个子组,需要注意的是组名不能重复,例如:import re

req = re.search('(?P\d{3})/(?P\w{4})','message 001/fjca') #(?P\d{3})两部分,?P指定组名为id,\d{3}指定要匹配的内容。

print(req.group())

print(req.group('id'))

print(req.group('name'))

#打印内容

001/fjca

001

fjca

常用属性re模块还包括一些常用的属性,可以在匹配时作为flags使用,如下:#re.I、re.IGNORECASE    不区分大小写的匹配

#re.L、re.LOCALE        根据所使用的本地语言环境通过\w、\W、\b、\B、\s、\S 实现匹配

#re.M、re.MULTILINE    ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾

#re.S、rer.DOTALL        “.”(点号)通常匹配除了\n(换行符)之外的所有单个字符;该标记表示“.”(点号)能够匹配全部字符

#re.X、re.VERBOSE        通过反斜线转义,否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性

分组

() 小括号中匹配的分为一组,常用功能:简洁代码、字串提取,例如:#匹配ip地址,相同的部分写成了一组

import re

re.match(r'(\d{1,3}.){3}\d{1,3}','127.0.0.1')#识别时间,提取小时、分钟、秒

import re

t = '23:05:30'

m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)

print (m.groups())

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值