2016-07-22 6 views
0

GoogleのPythonコースで提供されているいくつかの正規表現の例をリストに渡し、各出力を新しい行に出力しようとしています。GoogleのPythonコース:正規表現のリストを繰り返し、各行を新しい行に出力する

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

それだけの屋台やそれ以上の出力を生成しません:私はpython regex.py実行すると

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 

は、私は次の取得します。私は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

forループ内でmatchesに追加しているため、永久に実行し続ける理由はありません。あなたは常にそれを追加してリストを長くしますが、forループは最後に到達するまで実行されますが、到達することはありません。

for the_match in matches: 
    print (the_match) 
+1

'matches.append(the_match')を削除し、' print'行を 'print(the_match)'に変更しました。私は新しいスクリプトで質問を更新します。 –

0

あなたは無限ループを持っている:

for the_match in matches: 
    matches.append(the_match) 

これは永遠リストに新しいアイテムを追加します。あなたがこれで達成しようとしていることはわかりませんが、これらの2つの行を単に削除できるようです。

+0

ありがとうございます。猫 トレースバック(最新のコールが最後): ファイル "regex.py"、13行目、 print( "\ n" .join(matches) )) TypeError:シーケンスアイテム0:期待されるstrインスタンス、_sre.SRE_Match found'次に、 'print'行を' print( "\ n" .join(str(matches)) 'に変更し、' cat: ファイル "regex.py"ファイル タイプエラー: 'str'は、オブジェクトは呼び出し可能ではありません。 –

関連する問題