re.findall和re.finditer的区别——Python 2.7 re模块中的bug?
在演示Python的正则表达式功能时,我编写了一个小程序来比较re.search、re.findall和re.finditer的返回值。我知道re.search每行只能找到一个匹配项,并且re.findall只返回匹配的子字符串,而不返回任何位置信息。然而,我惊讶地发现,匹配的子字符串在这三个函数之间可能有所不同 代码: 以及在Python 2.7.3和2.7.5上测试的输出:re.findall和re.finditer的区别——Python 2.7 re模块中的bug?,python,regex,python-2.7,Python,Regex,Python 2.7,在演示Python的正则表达式功能时,我编写了一个小程序来比较re.search、re.findall和re.finditer的返回值。我知道re.search每行只能找到一个匹配项,并且re.findall只返回匹配的子字符串,而不返回任何位置信息。然而,我惊讶地发现,匹配的子字符串在这三个函数之间可能有所不同 代码: 以及在Python 2.7.3和2.7.5上测试的输出: re.search() Line Start End Match ====== ====== ==
re.search()
Line Start End Match
====== ====== ====== =====
248 7 21 eleven o'clock
1520 24 35 one o'clock
1975 21 33 nine o'clock
2106 4 16 four o'clock
4443 19 30 ten o'clock
re.findall()
Line Start End Match
====== ====== ====== =====
248 eleven
1520 one
1975 nine
2106 four
4443 ten
re.finditer()
Line Start End Match
====== ====== ====== =====
248 7 21 eleven o'clock
1520 24 35 one o'clock
1975 21 33 nine o'clock
2106 4 16 four o'clock
4443 19 30 ten o'clock
我错过了什么?为什么re.findall不返回o点位?根据:
。。。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表
该模式只包含一个组;findall返回组的列表
使用括号的非捕获版本:
>>> re.findall('a(?:b)c', 'abc')
['abc']
根据:
。。。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表
该模式只包含一个组;findall返回组的列表
使用括号的非捕获版本:
>>> re.findall('a(?:b)c', 'abc')
['abc']
为一个简单的问题进行长时间的阅读,以确定我的问题是否会重复。难道不能用简单的示例文字将冗长的示例代码简化为3行左右,以便向读者很好地展示这个问题吗?阅读一个简单的问题,了解我的问题是否会重复。难道不能用简单的示例文字将冗长的示例代码简化为3行左右,以便向读者很好地展示这个问题吗?
>>> re.findall('a(?:b)c', 'abc')
['abc']