2010-07-15 59 views
0

我想解析大約一百行的輸出。這個輸出的格式是這樣的:Python中的正則表達式幫助

<random text> STATION "STATION_NAME_ONE": <random text> 
<random text> IP Address: 0.0.0.0 <random text> 
<SEVERAL LINES OF RANDOM TEXT> 

<random text> STATION "STATION_NAME_TWO": <random text> 
<random text> IP Address: 1.1.1.1 <random text> 
<SEVERAL LINES OF RANDOM TEXT> 

... and so on 

我知道我正在尋找的站的IP地址。使用IP地址,我試圖構造一個正則表達式來查找站名。電臺名稱可以是任意長度,可以包含任意數量的數字/字母/下劃線。電臺名稱將始終以STATION開頭,後面總是後跟冒號。 IP地址將始終位於電臺名稱後面的一行,並始終在IP地址之前。

注意有幾個站有不同的站名和IP地址。 「隨機文本」可以是任何長度,幷包含任何符號/數字/字母。

到目前爲止,我嘗試過:

re.search('(?<=STATION).*?(?=:.*IP Address: %s)' % sta_ip, output, re.DOTALL) 

但顯然這將每次返回幾乎是第一個站名。

你如何製作一個正則表達式來搜索指定的站名?這可能嗎?

回答

0

編輯 我明白了。關鍵是電臺名稱和IP只由一個換行符分隔,所以我們可以硬編碼該換行符。

​​
+0

這個遺憾仍然會返回第一個站名,不管ip。 – 2010-07-15 00:17:19

+0

試試我編輯的代碼,它應該像廣告中那樣工作 – Josiah 2010-07-15 00:33:22

+0

嗯,這是工作。謝謝。 – 2010-07-15 00:41:55

0
STATION\s*"(.*?)":\s*.*?(?:\r|\n)<.*?>\s*IP Address:\s*IPHERE\s*< 

用IP地址替換IPHERE並獲取站名,提取第一個匹配組。

+0

我不能得到這個返回一組。:( – 2010-07-15 00:20:58

+0

正則表達式的作品,所以它必須是你如何試圖拿到小組第一,確保你使用了正確的正則表達式功能 – 2010-07-15 00:26:04

+0

快速的問題,什麼做引號呢? – 2010-07-15 00:29:35

0

嘗試/STATION\s*?"(.*?)"\s*?:.*?IP Address:\s*?%s/
訣竅是不要貪婪地進行匹配。匹配這個正則表達式後,你想要的名字將在第一次捕獲。

+0

嗯,我無法得到這個返回一個組。 – 2010-07-15 00:20:18