2017-04-18 8 views
0

C、CLK、CEポートとそのポートに関連する特定の印刷を効果的に検索するために、次の正規表現を改善するにはどうすればよいですか?この正規表現をPythonで修正する

以下のコードは、C、CLK、CEを検出しますが、すべてCポートとラベル付けされていますが、これは意図されていません。

以下のサンプルコード:

import re 
test_array = ['jclk','jce','ja','jb','jc','jd','je'] 

for thisEntry in test_array: 
    if re.match(r'jc', thisEntry): 
     print("this is C port") 
    elif re.match(r'jce', thisEntry): 
     print("this is CE port") 
    elif re.match(r'jclk', thisEntry): 
     print("this is CLK port") 
    else: 
     print("dont care") 

結果:事前に

this is C port  #for 'jclk', incorrect 
this is C port  #for 'jce', incorrect 
dont care   #for 'ja', correct 
dont care   #for 'jb', correct 
this is C port  #for 'jc', correct 
dont care   #for 'jd', correct 
dont care   #for 'je', correct 

感謝。

+0

あなたがアンカーを使用する必要があります。 btwなぜここで正規表現を使っているのか分かりません。 'thisEntry == 'jc''条件を使用できませんか? – anubhava

+0

こんにちは、ありがとうございました。私が 'thisEntry == 'jc'を使用しない理由は、実際のアプリケーションでは、値が単純な 'j *'引数ではないクラスから辞書にアクセスしているからです。 – Meeyaw

+1

これで、単語境界またはアンカーを次のように使用します: 're.match(r '\ bjc \ b'、thisEntry): ' – anubhava

答えて

1

私のコメントを回答に翻訳しています。

jcが多くの入力文字列の一部であるため、この問題が発生しています。

あなたは余分なテキストにマッチするのを避けるために、このようなアンカーまたはワード境界を使用する必要があります。

import re 
test_array = ['jclk','jce','ja','jb','jc','jd','je'] 

for thisEntry in test_array: 
    if re.match(r'\bjc\b', thisEntry): 
     print("this is C port") 
    elif re.match(r'\bjce\b', thisEntry): 
     print("this is CE port") 
    elif re.match(r'\bjclk\b', thisEntry): 
     print("this is CLK port") 
    else: 
     print("dont care")