正则表达式中,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 : 扫描整个字符串并返回第一个成功的匹配,这个第一个指的是字符串最靠前的匹配。