Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
re.findall和re.finditer的区别——Python 2.7 re模块中的bug?_Python_Regex_Python 2.7 - Fatal编程技术网

re.findall和re.finditer的区别——Python 2.7 re模块中的bug?

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 ====== ====== ==

在演示Python的正则表达式功能时,我编写了一个小程序来比较re.search、re.findall和re.finditer的返回值。我知道re.search每行只能找到一个匹配项,并且re.findall只返回匹配的子字符串,而不返回任何位置信息。然而,我惊讶地发现,匹配的子字符串在这三个函数之间可能有所不同

代码:

以及在Python 2.7.3和2.7.5上测试的输出:

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']