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

来源:10-9 组

充电两分钟

2018-02-12

import re

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

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

我用的是Pycharm Python3

写回答

2回答

7七月

2018-02-13

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

0
1
充电两分钟
非常感谢!
2018-02-13
共1条回复

慕运维2948618

2018-02-12

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

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

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


0
4
慕运维2948618
回复
慕斯卡8323326
有个地方写错了,改正: r = re.findall('((第二组)(第三组))', '第二组第三组') 。不过你懂了就好:)
2018-02-17
共4条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14446 学习 · 4438 问题

查看课程