文件中包含以下行。我想从这个文件中提取多个数据。
当前用户构建列表的数量:23
- 'RevisionBuild'运行时间(以分钟为单位)= 8.40
[Build] RC = 0
我使用以下正则表达式从此文件中检索值23
<ac:for param="line" list="${logFileContent}" delimiter="${line.separator}">
<sequential>
<propertyregex property="noOfBuildlists"
input="@{line}"
regexp="(.*)Number of current user build lists: (.*)$"
select="\2"/>
</sequential>
</ac:for>
但是当我尝试获取其他行时,相同的正则表达式不会获取任何值 regexp =“(。)[revBuild] RC =(。)$”或regexp =“(。)'RevisionBuild'运行时间(以分钟为单位)=(。) $“其中提取的值应分别为0和8.40。
有人可以帮忙吗? 谢谢, Aarthi
答案 0 :(得分:10)
我认为这是你感兴趣的。在下面的输入文件
Number of current user build lists: 23
'RevisionBuild' Run time (in minutes) = 8.40
[Build] RC = 0
当我执行低于目标
时<project name="BuildModule" basedir="." default="extract.nums">
<taskdef resource="net/sf/antcontrib/antlib.xml" />
<property environment="env" />
<loadfile property="file" srcfile="${basedir}/inputLog.log"/>
<target name="extract.nums">
<for param="line" delimiter="${line.separator}" list="${file}">
<sequential>
<propertyregex property="noOfBuildlists" input="@{line}" regexp="Number of current user build lists:\s*([0-9]+)$" select="\1" />
<propertyregex property="revisionBuild" input="@{line}" regexp="'RevisionBuild' Run time\s*\(in minutes\)\s*=\s*([0-9\.]+)$" select="\1" />
<propertyregex property="rcBuild" input="@{line}" regexp="\[Build\] RC\s*\=\s*([0-9]+)$" select="\1" />
</sequential>
</for>
<echo message="Current user build : ${noOfBuildlists}" />
<echo message="Revision Build : ${revisionBuild}" />
<echo message="RC Build : ${rcBuild}" />
</target>
</project>
我低于输出。
[echo] Current user build : 23
[echo] Revision Build : 8.40
[echo] RC Build : 0
答案 1 :(得分:1)
当我使用propertyregex
时,会提示错误if doesn't support the nested "condition" element
。我的{android.sdk.air}/tools/ant/build.xml
中有许多嵌套的“条件”元素。所以我试图找到标准Ant可以呈现的解决方案。我做到了。
试试这个:
<loadfile
encoding="UTF-8"
property="property.for.your.string"
srcFile="your/file/path" >
<filterchain>
<tokenfilter>
<containsregex
pattern="Number of current user build lists:\s*([0-9]+)$"
replace="\1" />
</tokenfilter>
</filterchain>
</loadfile>
<echo message="DEBUG LOG: property.for.your.string = ${property.for.your.string}" />
这让我想知道为什么ant将属性命名为“replace”,这导致了我的误解。