Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
为什么Python re finditer()group()属性只在解释器中第一次调用时返回匹配项?_Python_Regex - Fatal编程技术网

为什么Python re finditer()group()属性只在解释器中第一次调用时返回匹配项?

为什么Python re finditer()group()属性只在解释器中第一次调用时返回匹配项?,python,regex,Python,Regex,有人能解释为什么print match.group()只在下面的for循环中第一次调用时返回结果匹配吗?我希望它每次调用时都打印匹配。我在阅读Python文档时遇到了这个例子:Regex HOWTO Python 2.7.2 (default, Oct 11 2012, 20:14:37) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin Type "help", "copyright",

有人能解释为什么print match.group()只在下面的for循环中第一次调用时返回结果匹配吗?我希望它每次调用时都打印匹配。我在阅读Python文档时遇到了这个例子:Regex HOWTO

Python 2.7.2 (default, Oct 11 2012, 20:14:37) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> p = re.compile('\d+')
>>> iterator = p.finditer('12 drummers, 11 pipers, 10 dancers')
>>> iterator
<callable-iterator object at 0x107deabd0>
>>> for match in iterator:
...  print match.group()
... 
12
11
10
>>> for match in iterator:
...  print match.group()
... 
>>> 
Python 2.7.2(默认,2012年10月11日20:14:37)
达尔文的[GCC 4.2.1兼容Apple Clang 4.0(标签/Apple/Clang-418.0.60)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>进口稀土
>>>p=重新编译('\d+'))
>>>迭代器=p.finditer('12名鼓手,11名吹笛手,10名舞者')
>>>迭代器
>>>对于迭代器中的匹配:
...  打印match.group()
... 
12
11
10
>>>对于迭代器中的匹配:
...  打印match.group()
... 
>>> 
返回生成匹配项的迭代器。一旦迭代器一直运行一次,迭代器就会耗尽。这和你这样做是一样的:

>>> l = [1, 2, 3]
>>> it = iter(l)
>>> for val in it:
    print val
1
2
3
>>> for val in it:
    print val
>>>
也就是说,您永远不会在第二个for循环中调用
match.group()
。如果是,并且它没有返回任何内容,那么您应该希望看到打印出一些
None

p.finditer()
返回一个迭代器,该迭代器生成匹配项。一旦迭代器一直运行一次,迭代器就会耗尽。这和你这样做是一样的:

>>> l = [1, 2, 3]
>>> it = iter(l)
>>> for val in it:
    print val
1
2
3
>>> for val in it:
    print val
>>>

也就是说,您永远不会在第二个for循环中调用
match.group()
。如果是,并且它没有返回任何内容,那么您应该期望看到一些
None
s打印出来。

这是python描述的行为

引用文件:

该协议的目的是一旦迭代器的next()方法 引发StopIteration,它将在后续调用中继续这样做。 不遵守此属性的实现将被视为已损坏

您在第一个
中读取了迭代器中的所有项,用于。。。在
循环中,因此没有任何内容可供阅读

如果要再次进行匹配,则需要获得一个新的迭代器:

>>> iterator = p.finditer('12 drummers, 11 pipers, 10 dancers')

这是python描述的行为

引用文件:

该协议的目的是一旦迭代器的next()方法 引发StopIteration,它将在后续调用中继续这样做。 不遵守此属性的实现将被视为已损坏

您在第一个
中读取了迭代器中的所有项,用于。。。在
循环中,因此没有任何内容可供阅读

如果要再次进行匹配,则需要获得一个新的迭代器:

>>> iterator = p.finditer('12 drummers, 11 pipers, 10 dancers')

不得不把这个给@Carl,因为他引用了Python文档中的答案。不过我还是给了你一张第一票。@JamesNicholson:当然,谢谢。很高兴知道这是指定的行为必须把这个给@Carl,因为他引用了Python文档中的答案。不过我还是给了你一张第一票。@JamesNicholson:当然,谢谢。很高兴知道它是指定的行为如果您重复使用匹配可能会使用re.findall:>>>>导入re>>>>p=re.compile('\d+')>>>mylist=p.findall('12个鼓手,11个吹笛手,10个舞者')>>打印mylist['12',11',10']>>如果您重复使用匹配可能会使用re.findall:>>导入re>>p=re.compile('\d+'))>>>mylist=p.findall('12名鼓手,11名吹笛手,10名舞者')>>>打印mylist['12','11','10']>>