Python | group()和groups()的区别
2019-02-19 本文已影响0人
Quora文选
2019年02月18日 21:32:31
标签:python、正则表达式
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
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())
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
groups用法:
>>> import re
>>> a="123abc456"
>>> print(re.search('([0-9])([a-z]*)([0-9]*)', a).groups())
('1', '', '23')
>>> print(re.search('([0-9]*)([a-z]*)([0-9]*)', a).groups())
('123', 'abc', '456')
[]
只能匹配其中的某1
个字符!!
[]*
为多字符匹配
>>> import re
>>> a="123abc456"
>>> print(re.search('([0-9])*([a-z]*)([0-9]*)', a))
<re.Match object; span=(0, 9), match='123abc456'>
>>> print(re.search('([0-9])*([a-z]*)([0-9]*)', a).groups())
('3', 'abc', '456')
>>> print(re.search('([0-9])*([a-z])*([0-9]*)', a))
<re.Match object; span=(0, 9), match='123abc456'>
>>> print(re.search('([0-9])*([a-z])*([0-9]*)', a).groups())
('3', 'c', '456')
match到的字符串均为123abc456,查找的时候先不考虑(),根据查找的结果分配()所对应的。
([a-z]*)
: 第2组括号内匹配多个a-z的字母组合,即为abc
([a-z])*
: 第2组括号内为单个字母,出现多次,即为a匹配一次→b匹配一次→c匹配一次,取最后匹配出来的值,即为c,我的理解类似堆栈,不知道是否准确。
re.search
: 扫描整个字符串并返回第一个成功的匹配,这个第一个指的是字符串最靠前的匹配。
其他:
>>> import re
>>> a="123abc456"
>>> print(re.search('[0-9]*([a-z]*)([0-9]*)', a).groups())
('abc', '456')
>>> print(re.search('[0-9]*([a-z]*)([0-9]*)', a))
<re.Match object; span=(0, 9), match='123abc456'>
>>> print(re.search('[0-9]([a-z]*)([0-9]*)', a))
<re.Match object; span=(0, 3), match='123'>
参考资料:
https://www.cnblogs.com/zengguowang/p/7779699.html
https://www.cnblogs.com/cute/p/9186208.html
https://www.cnblogs.com/zyy98877/p/8482371.html
http://www.runoob.com/python3/python3-reg-expressions.html
http://f.dataguru.cn/thread-212244-1-1.html