2017-04-18 37 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

您需要使用錨。順便說一句,我不明白你爲什麼在這裏使用正則表達式。你不能使用'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")