2012-02-22 47 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

相关问题