2010-04-13 16 views
1

,我有以下數據:如何在不同的正則表達式的口味寫這

a b c d FROM:<uniquepattern1> 
e f g h TO:<uniquepattern2> 
i j k l FROM:<uniquepattern1> 
m n o p TO:<uniquepattern3> 
q r s t FROM:<uniquepattern4> 
u v w x TO:<uniquepattern5> 

我想正則表達式查詢可以找到TO:內容時遇到FROM:<uniquepattern1>,那麼結果將是uniquepattern2uniquepattern3 。我很感激關於如何編寫這個(lookahead參數?)的任何指針,以及在不同平臺上的正則表達式(例如C#.NET Regex與Grep vs Perl)之間的任何差異,這些差異可能與此處的相關性有所不同。

謝謝。

回答

2

嘗試:

/FROM:<uniquepattern1>.*\r?\n.*?TO:<(.*?)>/ 

這是通過首先找到FROM錨,然後使用點通配符。點運算符不是匹配換行符,所以這將消耗行的其餘部分。非貪婪點通配符匹配消耗到下一個TO並捕獲尖括號之間的內容。

+0

謝謝你的答覆。 – 2010-04-13 10:11:05

1

您對文件解析的要求很簡單。沒有必要使用正則表達式。打開文件閱讀,通過每行檢查FROM:<uniquepattern1>,獲取下一行並打印出來。此外,您的TO行僅以「:」分隔。因此您可以將其用作字段分隔符。

例如使用awk

$ awk -F":" '/FROM:<uniquepattern1>/{getline;print $2}' file 
<uniquepattern2> 
<uniquepattern3> 

這同樣適用其他語言/工具

+0

謝謝你的迴應。 Cletus的答案更多的是我想要的,但是我向你介紹了awk的答案。我沒有使用它,將來會研究它的未來情況。 – 2010-04-13 10:11:53