python正则表达式的问题

lcqqcllcqqcl 2017-12-12 12:13:49
re.findall('(ab)','abababab')
得到 的结果是:
['ab', 'ab', 'ab', 'ab']


re.findall('(ab)+','abababab')
得到的结果是:
['ab']

我不理解第二个匹配结果。请各位指点指点
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcqqcllcqqcl 2017-12-19
  • 打赏
  • 举报
回复
引用 5 楼 xpresslink 的回复:
在正则表达式里面小括号代表分组,这个分组指的是对于整个表达式来说中间的子集。 正则匹配后得到的match对象把结果也按分组来输出,group(0)是代表整个正则表达式匹配的整个字符串,group(1)是代表正则表达式里面第一个括号的内的匹配内容,group(2)对炒应第2个括号,group(n)依次表示。 你这个只有一个括号,所以就只有group(0)和group(1)
想了几天,逐渐理解了。多谢了!
混沌鳄鱼 2017-12-13
  • 打赏
  • 举报
回复
在正则表达式里面小括号代表分组,这个分组指的是对于整个表达式来说中间的子集。 正则匹配后得到的match对象把结果也按分组来输出,group(0)是代表整个正则表达式匹配的整个字符串,group(1)是代表正则表达式里面第一个括号的内的匹配内容,group(2)对炒应第2个括号,group(n)依次表示。 你这个只有一个括号,所以就只有group(0)和group(1)
lcqqcllcqqcl 2017-12-13
  • 打赏
  • 举报
回复
引用 2 楼 xpresslink 的回复:
最重要的是要理解“模式”这个词 因为前一个匹配的是整体就是 'ab' 而后一个匹配的整体是多个 'ab' 就是说把'abababab'当成一个整体来匹配。 见下面演示:

>>> import re
>>> match = re.search('(ab)', 'abababab')
>>> match.group(0)
'ab'
>>> match.group(1)
'ab'
>>> match = re.search('(ab)+', 'abababab')
>>> match.group(0)
'abababab'
>>> match.group(1)
'ab'

group(1)的意义或作用是什么, group(1)能给我们提供什么信息吗?
lcqqcllcqqcl 2017-12-13
  • 打赏
  • 举报
回复
引用 1 楼 seakingx 的回复:
(ab)+ 表示ab重复。 结合这个例子,应该明白了吧 re.findall('(ab)+','ababcababc') ['ab', 'ab']
(ab)+ 表示ab重复。 为什么答案不是['abab','abab']?
混沌鳄鱼 2017-12-12
  • 打赏
  • 举报
回复
最重要的是要理解“模式”这个词 因为前一个匹配的是整体就是 'ab' 而后一个匹配的整体是多个 'ab' 就是说把'abababab'当成一个整体来匹配。 见下面演示:

>>> import re
>>> match = re.search('(ab)', 'abababab')
>>> match.group(0)
'ab'
>>> match.group(1)
'ab'
>>> match = re.search('(ab)+', 'abababab')
>>> match.group(0)
'abababab'
>>> match.group(1)
'ab'

陈年椰子 2017-12-12
  • 打赏
  • 举报
回复
(ab)+ 表示ab重复。 结合这个例子,应该明白了吧 re.findall('(ab)+','ababcababc') ['ab', 'ab']

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧