Python的re模块使用

Python使用re模块提供了正则表达式处理的能力

一、常量

这里写图片描述

二、方法

1,编译
re.compile(pattern,flags= 0)
pattern就是正则表达式字符串,flags是选项。正则表达式推荐先编译,为了提高效率,因为编译后的结果被保存,下次使用同样的pattern的时候,就不需要再次编译,
2,单次匹配
①mctch
regex对象match方法可以重设定开始位置和结束位置,返回match对象
定义 :re.match(pattern,string,flags = 0)
regex.match(string[,pos[,endpos]])
举例:

import re
test = '''bottle\nbag'''
regex = re.compile('b.+')
matcher = regex.match(test,1)
print(matcher)

②search
从头搜索直到第一个匹配,regex对象search方法可以重新设定开始位置和结束位置,返回match

import re
s = '''bottle\nbag\nbig\napple'''
regex = re.compile('b')
result = regex.search(s,1)
print(1,result)#扫描找到匹配的第一个位置
regex = re.compile('^b',re.M)
result = regex.search(s)
print(2,result)#不管是不是多行,找到就返回
result = regex.search(s,8)
print(3,result)#big

1 <_sre.SRE_Match object; span=(7, 8), match=’b’>
2 <_sre.SRE_Match object; span=(0, 1), match=’b’>
3 <_sre.SRE_Match object; span=(11, 12), match=’b’>
③fullmacth
用法和这个match相同,意思是整个字符串和正则表达式匹配,要完全匹配,多了少了都不行。

import re
s = '''bottle\nbag\nbig\napple'''
regex = re.compile('bag')
result = regex.fullmatch(s)
print(1,result)
result = regex.fullmatch(s,7)
print(2,result)
result = regex.fullmatch(s,7,10)
print(3,result)

1 None
2 None
3 <_sre.SRE_Match object; span=(7, 10), match=’bag’>

三、全文搜索

1,findall和findaiter
regex.findall(string[,pos[,endpos]])
对整个字符串,从左至右匹配,返回所有匹配项的列表

import re
s = '''bottle\nbag\nbig\nable'''
for i,c in enumerate(s,1):
    print((i -1,c),end = '\n' if i%8 == 0 else ' ')
print()
result=  re.findall('b',s)
print(1,result)
regex=re.compile('^b')
result = regex.findall(s)
print(2,result)
regex = re.compile('^b',re.M)
result = regex.findall(s,7)
print(3,result)#bag  big
regex = re.compile('^b',re.S)
result = regex.findall(s)
print(4,result)#bottle
regex = re.compile('^b',re.M)
result = regex.findall(s,7,10)
print(5,result)#bag

结果:
(0, ‘b’) (1, ‘o’) (2, ‘t’) (3, ‘t’) (4, ‘l’) (5, ‘e’) (6, ‘\n’) (7, ‘b’)
(8, ‘a’) (9, ‘g’) (10, ‘\n’) (11, ‘b’) (12, ‘i’) (13, ‘g’) (14, ‘\n’) (15, ‘a’)
(16, ‘b’) (17, ‘l’) (18, ‘e’)
1 [‘b’, ‘b’, ‘b’, ‘b’]
2 [‘b’]
3 [‘b’, ‘b’]
4 [‘b’]
5 [‘b’]
regex.finditer(string[,pos[,endpos]])
对整个字符串,从左至右匹配,返回所有匹配项,返回迭代器。注意每次迭代返回的是match对象。

import re
s = '''bottle\nbag\nbig\nable'''
for i,c in enumerate(s,1):
    print((i -1,c),end = '\n' if i%8 == 0 else ' ')
print()
regex = re.compile('^b',re.M)
result=  regex.finditer(s)
print(type(result))
print(next(result))
print(next(result))

结果:
(0, ‘b’) (1, ‘o’) (2, ‘t’) (3, ‘t’) (4, ‘l’) (5, ‘e’) (6, ‘\n’) (7, ‘b’)
(8, ‘a’) (9, ‘g’) (10, ‘\n’) (11, ‘b’) (12, ‘i’) (13, ‘g’) (14, ‘\n’) (15, ‘a’)
(16, ‘b’) (17, ‘l’) (18, ‘e’)

四、匹配替换

re.sub(pattern, replacement, string, count= 0, flags = 0)
regex.sub(replacement, string,count= 0)
使用pattern 对字符串string 进行匹配,对匹配项使用repl替换。
replacement可以是string,bytes ,function。

re.subn(pattern,replacement,string,count = 0,falgs = 0)
regex.subn(replacement,string,count = 0)
同 sub 返回一个元组(new_string, number_of_subs_made)

五、分割字符串

re.split(pattern,string,maxsplit= 0,falg = 0)
re.split分割字符串
举例:

#把每行单词提取出来
import re
s= '''01  bottle
02   bag
03     bag1 
100      able'''
regex = re.compile('\s+\d+\s+')
result = regex.split(' '+ s)
print(result)

[”, ‘bottle’, ‘bag’, ‘bag1’, ‘able’]

六、分组

使用小括号的pattern捕获的数据被放到了组group中。

match、search函数可以返回match对象;findall 返回字符串列表;finditer返回一个个match对象

如果pattern,如果有匹配的结果,会在match对象中
1 使用group(N)方式返回对应分组,1到N是对应的分组,0返回整个匹配的字符串
2 如果使用了命名分组,可以使用group(‘name’)的方式取分组
3 也可以使用groups()返回所有组
4 使用groupdict()返回所有命名的分组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值