2011-04-08 102 views
1

我幾次有過這個問題,我還是沒能找到一個很好的答案..正則表達式:關鍵字之後是值提取

在我目前的問題,我有一個控制檯程序輸出(串)看起來像這樣:

Number of assemblies processed = 1200 
Number of assemblies uninstalled = 1197 
Number of failures = 3 

現在我想提取這些數字,並檢查是否有失敗。 (這是一個gacutil.exe輸出,順便說一句)。換句話說,我想匹配任何數字[0-9] +在前面加上'failures ='的字符串。

我該怎麼做?我想獲得只有。當然我可以匹配整個事物,比如/ failures = [0-9] +/..然後修改第一個字符的長度(「failures =」)或類似的東西。關鍵是,我不想這樣做,這是一個蹩腳的解決方法。

因爲很奇怪;如果我的模式匹配但是沒有輸出(「failures =」)我想提取的東西([0-9] +),有一種方法可以做到這一點:

圖案(?=表達式)

要顯示的這個荒謬,如果整個文件被向後處理,我可以使用:

[0-9] +(?= = seruliaf)

...那麼,有沒有前進的方式? :T

回答

3

pattern(?=expression)是一個正則表達式積極的向前看,你正在尋找的是一個正則表達式看起來像這樣(?<=expression)pattern但這個功能不支持所有類型的正則表達式。這取決於您使用的是哪種語言。

更多信息在regular-expressions.info用於比較查看功能在此頁面上向下滾動2/3。

+0

很酷,謝謝!正確的,我實際上遇到了這個,但無法使用它,我認爲它是在Python中。 - 幸運的是,這一次我在C#和.NET ..支持這個功能。 :d – Efrain 2011-04-08 09:50:22

0

如果您的控制檯輸出看起來確實如此,請嘗試在找到單詞「failure」時分割字符串「=」,然後獲取最後一個元素(或第二個元素)。你沒有說你的語言是什麼,但是任何具有字符串分裂能力的體面語言都可以勝任。例如

gacutil.exe.... | ruby -F"=" -ane "print $F[-1] if /failure/"