求正则表达式牛人 怎样获得截获了多次的组的所有子串

太上绝情 2013-05-23 11:51:55
Match.group(i)方法说明里说
如果一个组被截获了多次 则 截获了多次的组返回最后一次截获的子串
比如"(\w)*"这样在组后跟数量词就会造成一个分组被截获多次,我想拿到某一组全部被截获的子串,而不仅是最后一次的该怎么做。
...全文
402 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
胡小来 2014-09-11
  • 打赏
  • 举报
回复
引用 4 楼 bjrxyz 的回复:
恩,自己实现了。可惜python为什么不内置呢?
re.findall 就是内置的,可能你的正则对每项的匹配有重叠。 比如对 "abc" 进行findall。 用正则 “(.)” 你会得到 [ "a", "b", "c" ] 但如果正则是 “(.).*” 你就只能得到 ["a"] 了
胡小来 2014-09-11
  • 打赏
  • 举报
回复
嗯 #3 楼的办法靠谱,等于是自己实现了一个 re.findall ~ 不如直接用内置的 re.findall ,但前提是你的正则对每一项的匹配是不重叠的(见文档上:Return all non-overlapping matches)。
太上绝情 2013-05-31
  • 打赏
  • 举报
回复
恩,自己实现了。可惜python为什么不内置呢?
  • 打赏
  • 举报
回复
我不写完整的代码了,在re库里面有search函数,返回一个re对象,具体对象类型,好像是_sre.SRE_Match类型,但是这无所谓,在这个对象,可以引用start,end函数,返回匹配字符串的起始,结束的位置。你只需要 x=re.search(pattern,string) if x: print string[x.start():x.end()] 你可以利用以上函数写一个自定义函数,每次从end返回的位置,开始不断匹配,直到不匹配或到字符串结尾。可以输出所有的匹配结果
Johnson518 2013-05-24
  • 打赏
  • 举报
回复
引用 1 楼 crifan 的回复:
帮你找到解决思路了: 【已解决】Python中的正则re查找中,从多个匹配的组中获得所有的匹配的值
您的答复真简洁啊~

37,735

社区成员

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

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