请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于正则表达式中组的疑问

import re

a = 'PythonPythonPythonPython'
r = re.findall('(Python){2}', a)
print(r)

此时能打印出两个Python,但是把2修改为3或者4是只打印一个Python,这是为什么呢?

我用的是Pycharm Python3

正在回答

2回答

7七月 2018-02-13 02:18:13

{2}代表 找两个PYthon,你有4个,当然会匹配两个。改成3,就是3个一组,你只有4个,所以只匹配一个。

0 回复 有任何疑惑可以回复我~
  • 提问者 充电两分钟 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-02-13 18:52:43
慕运维2948618 2018-02-12 14:23:03

如果有组存在(即括号括起来的字符),那么findall返回的是组的结果。

(Python){2}相当于(Python)Python,(Python){3}相当于(Python)PythonPython,所以(Python){2}返回两个Python,而(Python){3}返回一个Python。

你可以试试看((Python){3}),这里用了两个括号,代表有两个组,括号从外往里看,从左往右看,外面那个是第一组,里面那个是第二组。所以((Python){3})会返回[ ('PythonPythonPython', 'Python') ]


0 回复 有任何疑惑可以回复我~
  • 前面的看懂了,你说的后半段没太懂:
    》》你可以试试看((Python){3}),这里用了两个括号,代表有两个组,括号从外往里看,从左往右看,外面那个是第一组,里面那个是第二组。所以((Python){3})会返回[ ('PythonPythonPython', 'Python') ]
    回复 有任何疑惑可以回复我~ 2018-02-14 22:48:24
  • findall,如果只有只有一组或者没有组,返回的是字符串的列表。如果两组及以上,那么会返回包含各组的元组的列表,[(第一组,第二组,第三组...),(第一组,第二组,第三组...),...]。
    从外往里看,从左往右看的例子:
    ( (第二组), (第三组) ) 最外层的括号是第一组,紧接着是括号里面的左边第二组,右边第三组。
    r = re.findall('((第一组)(第二组))', '第一组第二组')
    那么r就是 [('第二组第三组','第二组','第三组')]
    这么说懂了吧?
    回复 有任何疑惑可以回复我~ 2018-02-16 12:08:10
  • 好的,多谢
    回复 有任何疑惑可以回复我~ 2018-02-17 14:43:06

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信