Google的Python课程:迭代正则表达式列表并在新行上打印每个输出

时间:2016-07-22 17:46:13

标签: python regex tuples

我正在尝试将Google Python课程提供的一些正则表达式示例传递到列表中,并在新行上打印每个输出。

import re
str='an example word:cat!!'
match=re.search(r'word:\w\w\w',str)
if match:
  print('I found a cat :)',match.group()) ## 'found word:cat'
else:
  print('did not find')


matches=[re.search(r'pi+', 'piiig'),re.search(r'i+', 'piigiiii'),re.search(r'\d\s*\d\s*\d', 'xx1 2   3xx'),re.search(r'\d\s*\d\s*\d', 'xx12  3xx'),re.search(r'\d\s*\d\s*\d', 'xx123xx'),re.search(r'^b\w+', 'foobar'),re.search(r'b\w+', 'foobar')]
for the_match in matches:
  matches.append(the_match)
print("\n".join(matches))
#del matches

当我运行python regex.py时,我得到以下内容:

python regex.py
I found a cat :) word:cat

它只是停滞并且不再产生输出。我必须按ctrl+c 2次才能退出。

请告诉我如何输出如下:

re.search(r'pi+', 'piiig') returned (<_sre.SRE_Match object; span=(0, 4), match='piii'>, <_sre.SRE_Match object; span=(1, 3), match='ii'>)
re.search(r'i+', 'piigiiii') returned <_sre.SRE_Match object; span=(1, 3), match='ii'>
etc...

我在Windows 10版本10.0.10586 64位上运行Python 3.5.2。

谢谢!

在你的答案(@Buzz)之后,我的脚本如下:

import re
str='an example word:cat!!'
match=re.search(r'word:\w\w\w',str)
matches=[re.search(r'pi+', 'piiig'),re.search(r'i+', 'piigiiii'),re.search(r'\d\s*\d\s*\d', 'xx1 2   3xx'),re.search(r'\d\s*\d\s*\d', 'xx12  3xx'),re.search(r'\d\s*\d\s*\d', 'xx123xx'),re.search(r'^b\w+', 'foobar'),re.search(r'b\w+', 'foobar')]

if match:
  print('I found a cat :)',match.group()) ## 'found word:cat'
else:
  print('No match found.')

for the_match in matches:
  print(the_match)

输出如下:

I found a cat :) word:cat
<_sre.SRE_Match object; span=(0, 4), match='piii'>
<_sre.SRE_Match object; span=(1, 3), match='ii'>
<_sre.SRE_Match object; span=(2, 9), match='1 2   3'>
<_sre.SRE_Match object; span=(2, 7), match='12  3'>
<_sre.SRE_Match object; span=(2, 5), match='123'>
None
<_sre.SRE_Match object; span=(3, 6), match='bar'>

这完美无缺。非常感谢你。

2 个答案:

答案 0 :(得分:2)

它永远运行的原因是因为你在for循环中附加dispatch_get_main_thread。你总是添加它使列表更长,这反过来使for循环运行,直到它可以到达结束,但它永远不会到达它。

matches

答案 1 :(得分:0)

你有一个无限循环:

for the_match in matches:
  matches.append(the_match)

这将永久地将新项目附加到列表中。我不知道你想用这个来实现什么,但看起来你可以简单地删除这两行。