python 正则表达式 groups和group有什么区别
为什么m=re.match("([abc])+","abc")printm.groups()返回的只有('c',)而不是abc而printm.group()就能返回整个的...
为什么
m = re.match("([abc])+", "abc")
print m.groups()
返回的只有('c',) 而不是 abc
而 print m.group() 就能返回整个的字符串
他们到底有什么区别呢 网上的解释我看的不是太明白 展开
m = re.match("([abc])+", "abc")
print m.groups()
返回的只有('c',) 而不是 abc
而 print m.group() 就能返回整个的字符串
他们到底有什么区别呢 网上的解释我看的不是太明白 展开
展开全部
group和groups是两个不同的函数。
一般,m.group(N) 返回第N组括号匹配的字符。
而m.group() == m.group(0) == 所有匹配的字符,与括号无关,这个是API规定的。
m.groups() 返回所有括号匹配的字符,以tuple格式。
m.groups() == (m.group(0), m.group(1), ...)
对你给的例子:
m = re.match("([abc])+", "abc")
你的+号在括号外面。括号最多匹配到一个字符,要么是a, 要么是c,这个python引擎匹配的是末尾的c。
而m.group() == m.group(0) 这个返回的是整个匹配的字符串"abc".
关于捕获型括号在正则表达式里的用法,参见相关文档。
一般,m.group(N) 返回第N组括号匹配的字符。
而m.group() == m.group(0) == 所有匹配的字符,与括号无关,这个是API规定的。
m.groups() 返回所有括号匹配的字符,以tuple格式。
m.groups() == (m.group(0), m.group(1), ...)
对你给的例子:
m = re.match("([abc])+", "abc")
你的+号在括号外面。括号最多匹配到一个字符,要么是a, 要么是c,这个python引擎匹配的是末尾的c。
而m.group() == m.group(0) 这个返回的是整个匹配的字符串"abc".
关于捕获型括号在正则表达式里的用法,参见相关文档。
更多追问追答
追问
如果 m.groups() == (m.group(0), m.group(1), ...) 那么groups是不是应该输出(abc,a,b,c) 而且因为+不是可以匹配一个或者多个么? 所以是不是应该有 m.group(0), m.group(1),m.group(2), m.group(3)三个数据
追答
m.group(2), m.group(3) 的意思是返回第2/3组括号匹配的字符串。
你看看你的表达式里面有几组括号?只有一组。所以在这个例子里面,这两个应该都是返回错误。
展开全部
group和groups是两个不同的函数。
一般,m.group(N) 返回第N组括号匹配的字符。
而m.group() == m.group(0) == 所有匹配的字符,与括号无关,这个是API规定的。
m.groups() 返回所有括号匹配的字符,以tuple格式。
m.groups() == (m.group(0), m.group(1), ...)
正则表达式中,group()用来提取分组截获的字符串,()用来分组。
组是通过 "(" 和 ")" 元字符来标识的。 "(" 和 ")" 有很多在数学表达式中相同的意思;它们一起把在它们里面的表达式组成一组。举个例子,你可以用重复限制符,象 *, +, ?, 和 {m,n},来重复组里的内容,比如说(ab)* 将匹配零或更多个重复的 "ab"。
如果不引入括号,整个个表达式作为一个组,是group(0)
对于题目中的例子:
m = re.match("([abc])+", "abc")
+号在括号外面。括号最多匹配到一个字符,要么是a, 要么是c,这个python引擎匹配的是末尾的c。
而m.group() == m.group(0) 这个返回的是整个匹配的字符串"abc".
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一、解释: match()函数只检测RE是不是在string的开始位置匹配 search()会扫描整个string查找匹配,会扫描整个字符串并返回第一个成功的匹配 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none二、例子: match(): print(re.match(‘super’, ‘superstition’).span())会返回(0, 5) print(re.match(‘super’, ‘insuperable’))则返回None search(): print(re.search(‘super’, ‘superstition’).span())返回(0, 5) print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结合所有回复,先上个我的例子作答:
import re
a = "I am a father, my age is 35. I like reading."
b = re.match('(I am).*?(\d+)', a, )
c = re.match('[Ii] am', a)
print(b.group())
print(b.group(0))
print(b.group(1))
print(b.group(2))
print(b.group(0,1,2))
print(b.groups())
#以下是对应的输出:
I am a father, my age is 35
I am a father, my age is 35 #可以看出group()默认参数是0,等于group(0),\
也即要匹配的字符串
I am #第1个括号的匹配
35 #第2个括号的匹配,表达式中有多少个括号,\
参数就最大是括号数
('I am a father, my age is 35', 'I am', '35')
('I am', '35') #groups()==group(1,2),是不包含group(0)的
楼主对正则的[]不理解,[abc]内只能匹配a,或b,或c。如果要匹配'abc',只能写成:
a = 'babccabc'
b = re.match('abc', a)
c = re.match(('abc'), a)
d = re.search('abc', a)
e = re.search(('abc'), a)
print(b) #match()只能匹配字符串开始处,匹配不上返回None
print(c) #可以看出一个匹配内容,可以有无小括号
print(d.group(0))
print(e.group())
#以下为输出
None
None
abc
abc
经多次测试,楼主的表达式含‘+’,会导致往后匹配,相当于贪婪模式,但是最后的数据确是取最后一位字母,而不是第一位,这点目前还不能给你个合理的解释
import re
a = "I am a father, my age is 35. I like reading."
b = re.match('(I am).*?(\d+)', a, )
c = re.match('[Ii] am', a)
print(b.group())
print(b.group(0))
print(b.group(1))
print(b.group(2))
print(b.group(0,1,2))
print(b.groups())
#以下是对应的输出:
I am a father, my age is 35
I am a father, my age is 35 #可以看出group()默认参数是0,等于group(0),\
也即要匹配的字符串
I am #第1个括号的匹配
35 #第2个括号的匹配,表达式中有多少个括号,\
参数就最大是括号数
('I am a father, my age is 35', 'I am', '35')
('I am', '35') #groups()==group(1,2),是不包含group(0)的
楼主对正则的[]不理解,[abc]内只能匹配a,或b,或c。如果要匹配'abc',只能写成:
a = 'babccabc'
b = re.match('abc', a)
c = re.match(('abc'), a)
d = re.search('abc', a)
e = re.search(('abc'), a)
print(b) #match()只能匹配字符串开始处,匹配不上返回None
print(c) #可以看出一个匹配内容,可以有无小括号
print(d.group(0))
print(e.group())
#以下为输出
None
None
abc
abc
经多次测试,楼主的表达式含‘+’,会导致往后匹配,相当于贪婪模式,但是最后的数据确是取最后一位字母,而不是第一位,这点目前还不能给你个合理的解释
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
m.groups返回一个包含所有字符的元组,而m.group返回一个包含那些组所对应值的元组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询