2011-04-08 136 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/"