2017-06-24 4 views
0

以下のコードは、一致する場合Trueを返しません。なぜ私は不思議に思っていますか?どんな助けもありがとうございます。Python Regexのパターンマッチングが有効でない変数名

注: ID_LIST = [ 'YYY-100'、 'YYYMM1640ASS20'、 'クルーザー'、 'SSDSC2BA20'、 'BBBPEDMD40']

'drives.txt' は、このような行が含まれている(上記の含まれていいくつかの行のID)。

:だから私は、そのID「SSDSC2BA20」は上記の行で2番目の単語と一致しますが、試合の下には戻りません引き受ける

「RED SSDSC2BA200G4R 200ギガバイトの2.5 SATA 6GクラスE 30,000-100,000は、毎秒の書き込み」真実。 二重チェックのために、私は 'match:print match.group()'を試みましたが、何も返しません。私は何が欠けていますか?


import re 

with open('drives.txt', 'r') as fr: 
    for id in id_list: 
    for line in fr: 
     match = re.search(r'%s' % id, line, re.I) 
     if match: 
     print 'True' 

代わりに上記の正規表現の注意、私はまた、以下を試してみましたが、それはどちらか動作しませんでした。 my_regex = r "。?" + re.escape(id)+ r "。?" = re.search(my_regex、ライン、re.I)

答えて

0

fr 一致は、ファイルポインタです。あなたの現在のアプローチでは、各正規表現ごとに1回、複数回繰り返します。これをしないでください。行を読むたびに、ファイルの終わりを指すまでファイルポインタを進めます。これは最初の反復自体で発生するため、今後の反復ではファイルから空の文字列を読み取ることになります。

1つの修正は、それぞれの内側ループの後にfr.seek(0, 0)を実行することです。これはお勧めしません。もう一つの修正はあなたのループを並べ替えることです。あなたのファイルを一度繰り返します。ここではあなたがそれを行う方法は次のとおりです。

また
with open('drives.txt', 'r') as fr: 
    for line in fr: 
     for id in id_list: 
      match = re.search(r'%s' % id, line, re.I) 
      if match: 
       print id, 'matches for line:', line 

を、私は変数名としてidを使用すると、組み込みid()機能をシャドウので、私はあなたがそれを変更お勧めしますことを言及する必要があります。

関連する問題