re模块match、search、findall区别及sub

1、match:是从开头匹配,若开头不满足,则返回null;
2、search: 在整个字符串中去匹配,匹配到一个即停止;
3、findall: 在整个字符串中匹配所有符合的,且以列表形式得到子串;
4、sub:替换每一个被匹配到的字符串,返回替换后的字符串。

(1)eg:findall

string='one1two2three3four4'
pattern =re.compile('\d+')
print (re.findall(pattern,string))

结果为:[‘1’, ‘2’, ‘3’, ‘4’]
(2)若改用search,则返回结果为1,因为匹配到第一个数字即停止;

print(re.search(pattern,string).group())

(3)若改用match,如下:则报错

print(re.match(pattern,string).group())

因为match是从匹配第一个字符,匹配不上,则返回null,会报null没有group属性,修改如下:

if re.match(pattern,string):
    print(re.match(pattern,string).group())
else:
    print ('null')

由此深入研究match,若将string改下:

string='2one'
print(re.match(pattern,string).group())
print(re.match(pattern,string).groups())

第一条结果为2;
第二条结果为()。

由此猜想应该是group()与groups()区别:

若继续将string与表达式改下:

string='234one'
print(re.match(pattern,string).group())
print(re.match(pattern,string).groups(2))

结果分别为:
234
()

经查证后groups()是必须要表达式里含有括号,才会有结果,由此将表达式改为如下:

string='234one'
pattern =re.compile('(\d+)')
print(re.match(pattern,string).group())
print(re.match(pattern,string).groups())

得到结果为:
234
(‘234’,)

继续改如下:

string='24one'
pattern =re.compile('(\d+)(\d+)')
print(re.match(pattern,string).group())  #得到所有匹配结果
print(re.match(pattern,string).group(1)) #得到第一组匹配结果
print(re.match(pattern,string).group(2)) #得到第二组匹配结果
print(re.match(pattern,string).groups()) #得到所有匹配结果,且以列表形式展示

得到结果如下:
24
2
4
(‘2’, ‘4’)

(4)sub–替换每一个被匹配到的字符串,返回替换后的字符串
eg1:

string='one1two2three3four4'
pattern =re.compile('\d+')
print (re.sub(pattern,'|',string)) 

结果为:one|two|three|four|
eg2:

string='i say, hello world'
pattern =re.compile(r'(\w+) (\w+)')
print (re.sub(pattern,r'\2 \1',string))

结果为:say i, world hello
其中第二个例子中若将r都去掉,则得不到此结果,经查r的作用是:r代表了原字符串,比如需匹配字符串isay\n,则表达式写为:re.compile(‘isay\n’),已达到转义目的,采用r,则写为
re.compile(r’isay\n’)即可,差别在于用不用加转义字符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值