2012-02-22 61 views
1

我已經嘗試了整個工作日來執行此操作,但是我還沒有找到結果。所以,我wan't做的是這樣的:Groovy:讀取文件並返回每個匹配結果

我有一個文本文件,格式化不好,在這個文件中textes的hunderts這樣的:

2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeheben_moduleaccess_triage_1', 

我會找到''之間的所有字符串所以其中一個結果是:stoerungbeheben_moduleaccess_triage_1並將其重新寫回.txt文件

文本不同,有時是相同的。

我試着filterLine和模式與正則表達式,但它不工作。

你能不能給我一個提示我該怎麼辦呢?

親切的問候

科林

回答

1

以下常規腳本生成所需的結果(雖然不寫入文件,但我相信你可以很容易地做到這一點):

def regex = "[0-9]+-[^']+'([^']+)'[^\r\n]*\r?\n?" 
def source = """ 
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeh_¤eben_moduleaccess_triage_1', 
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'otherbeheben_üü' 
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeheben_moduleaccess_triage_1', 
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'thirdhbeheben_äÄ_moduleaccess_triage_1' 
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeheben_mo&%duleaccess_triage_1', 
""" 

java.util.regex.Pattern p = java.util.regex.Pattern.compile(regex) 
java.util.regex.Matcher m = p.matcher(source) 

while(m.find()) { 
    println(m.group(1)) 
} 

產量:

stoerungbeh_¤eben_moduleaccess_triage_1 
otherbeheben_üü 
stoerungbeheben_moduleaccess_triage_1 
thirdhbeheben_äÄ_moduleaccess_triage_1 
stoerungbeheben_mo&%duleaccess_triage_1 

編輯: ex圖案夷將是長期的註釋,以便將其添加到答案:

維基百科的文章有正則表達式元字符一個相當全面的表:http://en.wikipedia.org/wiki/Regular_expression#Examples IMO學習和理解正則表達式的最好方式是寫和針對各種任意字符串執行正則表達式的zounds。

該模式遠不是最優的,但這裏是對[0-9] + - [^'] +'([^'] +)'[^ \ r \ n] * \ r?\ n的一些解釋。 :

[0-9] + - => +號表示匹配從0到9 1個或多個數字。然後停止在連字符(例如:2012-)。這是爲了解決這個問題,如果沒有換行符或者它是最後一行。

[^ '] +' =>匹配1個或多個字符未撇號和在撇號停止(例如:-02-21 05:16:47205 ERROR - 未發現KPI KPI映射' )。

([^「] +)」 =>匹配和捕捉1個或多個字符未撇號和在撇號停止(例如:stoerungbeheben_moduleaccess_triage_1' ,其中從在括號內的捕獲部分是:stoerungbeheben_moduleaccess_triage_1)。

[^ \ r \ n]的* =>匹配0或多個字符不屬於回車(\ R)或換行符(\ n)(例如:)。

\ r? =>匹配回車如果存在。

\ n? =>匹配換行符(如果存在)。

+0

哇,非常感謝。完美的作品。該文件已經以獨特的命中方式生成。 我從來沒有找到這個正則表達式模式:)你能否推薦我一個網站,有一個很好的解釋這個正則表達式,因爲我會理解它。 親切的問候,科林 – CollinG 2012-02-23 09:34:49

+0

請參閱編輯答案的解釋。不幸的是,我不能推薦任何關於正則表達式的「銀彈」網站。 – heikkim 2012-02-23 11:42:19

相關問題