2015-04-02 61 views
-1

我使用Python 2.7來讀取文件,我希望使用正則表達式的文件內容來提取某些信息。不過,我目前的正則表達式包含了我似乎無法擺脫的額外數據。Python的正則表達式findall意想不到的輸出

for event in reader: 
    #print(event) 
    strevent = str(event) 
    print re.findall(r"protocol':(.*?),", strevent) 

上面的代碼工作,並輸出爲re.findall命令是:

[' 6'] 

但即時尋找的輸出僅僅是

這是一個我正在閱讀的文件內容的片段

["{'protocol': 6", " 'dport-icode': 80", " 'signature-id': 15", " 'mpls- label': None", 
" 'sensor-id': 0", " 'impact-flag': 0""] 

目標是提取識別標籤之間的數據,並將其粘貼到變量中,然後再進行處理。

任何改進的正則表達式代碼將不勝感激。謝謝。

+3

模式中的空間在哪裏? – 2015-04-02 14:43:05

+0

那很簡單。凝視着我的臉,我想念它。如何從數字6中刪除['']或者僅僅是輸出? – rkleman12 2015-04-02 14:49:17

+1

你不必刪除任何東西,'findall'返回一個字符串列表,這就是它被放在方括號和引號之間的原因。你只需要從列表中選擇你想要的項目。 – 2015-04-02 14:54:10

回答

1
  1. 增加空間到你的模式

    print re.findall(r"protocol': (.*?),", strevent) 
    
  2. 從結果

    result = re.findall(r"protocol': (.*?),", strevent) 
    print [ r.strip() for r in result ] 
    
  3. 爲什麼不嘗試加載數據對象作爲JSON對象修剪你的白色空間?這種情況可能會更容易。 python json library