python正则表达式group的使用方法是什么?

本文详细讲解了正则表达式中括号的分组作用,group()函数的使用以及不同情况下的匹配和结果提取。通过实例演示了如何利用group()获取各组匹配的内容,并探讨了空组、多字符匹配和括号数量对结果的影响。
摘要由CSDN通过智能技术生成

正则表达式中,group()用来提出分组截获的字符串,()用来分组 

import re
a = "123abc456"
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))   #123abc456,返回整体
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)) #123
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)) #abc
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))  #456

1. 正则表达式中的三组括号把匹配结果分成三组

  •  group() 同group(0)就是匹配正则表达式整体结果
  •  group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。

2. 没有匹配成功的,re.search()返回None

3. 当然正则表达式中没有括号,group(1)肯定不对了。

import re
a="123abc456"
print(re.search('([0-9])([a-z]*)([0-9]*)', a).groups())
#RP重点1:m.groups() 返回所有括号匹配的字符
#RP重点2:
#[]只能匹配其中的某1个字符!!
#[]*为多字符匹配
#RP('1', '', '23')
b="3e692641369"
print(re.search('([0-9])([a-z])([0-9])', b).groups())
#('3', 'e', '6')
c="3efg692641369"
print(re.search('([0-9])([a-z]*)([0-9])', c).groups())
#('3', 'efg', '6')
d="3efg692641369"
print(re.search('([0-9])([a-z]*)([0-9]*)', d).groups())
#('3', 'efg', '692641369')
e="369efg692641369"
print(re.search('([0-9]*)([a-z]*)([0-9]*)', e).groups())
#('369', 'efg', '692641369')

 输出:

('1', '', '23')
('3', 'e', '6')
('3', 'efg', '6')
('3', 'efg', '692641369')
('369', 'efg', '692641369')

import re
a="123abc456"
print(re.search('([0-9]*)([a-z]*)([0-9]*)', a).group())
print(re.search('([0-9]*)([a-z]*)([0-9]*)', a).group(1))
print(re.search('([0-9]*)([a-z]*)([0-9]*)', a).group(2))
print(re.search('([0-9]*)([a-z]*)([0-9]*)', a).group(3))
b="3e692641369"
print(re.search('([0-9])([a-z])([0-9])', b).group())
print(re.search('([0-9])([a-z])([0-9])', b).group(1))
print(re.search('([0-9])([a-z])([0-9])', b).group(2))
print(re.search('([0-9])([a-z])([0-9])', b).group(3))
print(re.search('([0-9]*)([a-z]*)([0-9]*)', b).group())
print(re.search('([0-9]*)([a-z]*)([0-9]*)', b).group(1))
print(re.search('([0-9]*)([a-z]*)([0-9]*)', b).group(2))
print(re.search('([0-9]*)([a-z]*)([0-9]*)', b).group(3))
c="3efg692641369"
print(re.search('([0-9])([a-z]*)([0-9])', c).group())
d="3efg692641369"
print(re.search('([0-9])([a-z]*)([0-9]*)', d).group())
e="369efg692641369"
print(re.search('([0-9]*)([a-z]*)([0-9]*)', e).group())

 输出:

123abc456
123
abc
456
3e6
3
e
6
3e692641369
3
e
692641369
3efg6
3efg692641369
369efg692641369
import re
a="123abc456"
print(re.search('([0-9])*([a-z]*)([0-9]*)', a))
b=re.search('([0-9])*([a-z]*)([0-9]*)', a)#RP测试
print(b.group())
print(re.search('([0-9])*([a-z]*)([0-9]*)', a).groups())
#<re.Match object; span=(0, 9), match='123abc456'>
# 123abc456
# ('3', 'abc', '456')
import re
a="123abc456"
print(re.search('([0-9])*([a-z])*([0-9]*)', a))
print(re.search('([0-9])*([a-z])*([0-9]*)', a).groups())
print(re.search('([0-9]*)([a-z]*)([0-9]*)', a).groups())
#<re.Match object; span=(0, 9), match='123abc456'>
#('3', 'c', '456')
#('123', 'abc', '456')

 

match到的字符串均为123abc456,查找的时候先不考虑(),根据查找的结果分配()所对应的。

([a-z]*) : 第2组括号内匹配多个a-z的字母组合,即为abc

([a-z])* : 第2组括号内为单个字母,出现多次,即为a匹配一次→b匹配一次→c匹配一次,取最后匹配出来的值,即为c,我的理解类似堆栈,不知道是否准确。

re.search : 扫描整个字符串并返回第一个成功的匹配,这个第一个指的是字符串最靠前的匹配。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值