2017-04-14 64 views
0

我有下面的代碼:Python的正則表達式搜索字符串

def ospf_route_type_E2_exists(nbr_output,AS_ext_net_list,net_list): 
    match_list=[] 
    if type(AS_ext_net_list) is not list: 
     AS_ext_net_list=[AS_ext_net_list] 
    if type(net_list) is not list: 
     net_list=[net_list] 
    for ext_net,net in zip(AS_ext_net_list,net_list): 
     net_prefix=str(net).rstrip(".0") 
     match= re.search(r"O[" "]+E2[" "]+str\(ext_net\)[" "]+\[[0-9]*[0-9]*[0-9]+\/[0-9]+\][" "]+via[" "]+str(net_prefix)",nbr_output) 
     match_list.append(match) 
    if any(item for item in match_list): 
     print "AS External networks properly advertised via correct areas" 
     return 1 
    else: 
     print "AS External networks not properly advertised via correct areas" 
     return 0 

的nbr_ouput下面包含:

show ip route ospf 
O IA 192.168.42.0/24 [110/2] via 192.168.43.4, 00:00:29, FastEthernet0/0 
O 192.168.124.0/24 [110/2] via 192.168.43.4, 00:00:29, FastEthernet0/0 
    10.0.0.0/24 is subnetted, 1 subnets 
O E2 10.1.1.0 [110/1] via 192.168.43.4, 00:00:29, FastEthernet0/0 

我要搜索的行:

O E2 10.1.1.0 [110/1] via 192.168.43.4, 00:00:29, FastEthernet0/0 

使用如我的代碼中的匹配行:

match= re.search(r"O[" "]+E2[" "]+str\(ext_net\)[" "]+\[[0-9]*[0-9]*[0-9]+\/[0-9]+\][" "]+via[" "]+str(net_prefix)",nbr_output) 

預期輸出:

 print "AS External networks properly advertised via correct areas" 
     return 1 

輸出,我得到:

 print "AS External networks not properly advertised via correct areas" 
     return 0 

,告訴我,我的正則表達式搜索無法正常工作。請讓我知道我做錯了

+0

爲什麼你在'[「」]'中有引號?您嘗試匹配的字符串中沒有引號。 – Barmar

+0

您可以使用'\ d'來匹配數字而不是'[0-9]'。 '[0-9] * [0-9] * [0-9] +'沒有意義重複它們,它應該是'[0-9] +'。 – Barmar

+0

我試圖匹配至少一個或多個空格。我做錯了嗎?它應該只是'[] +'?除此之外,一切都很好? –

回答

0

我用:

match= re.search(r"O\s+E2\s+"+str(ext_net)+"\s+\[[0-9]+\/[0-9]+\]\s‌​+via\s+"+str(net_pre‌​fix),nbr_output) 

和它的作品。

相關問題