2011-04-01 207 views
1

我需要一个正则表达式来提取JAR名称和版本。输入值是在下面的格式:路径目录的正则表达式

C:\WORK\Modify file\test2\lib\messageclass-12.jar 
C:\WORK\Modify file\test2\lib\utilities-396.jar 
C:\WORK\Modify file\test2679\lib\castor-1.jar 

输出应为:

messageclass 
12 

utilities 
396 

castor 
1 

任何帮助理解。 更新

我在蚂蚁脚本中使用这2个属性的值来提取:MessageClass的和12波纹管:

<propertyregex override="yes" property="propA" input="@{file}" regexp="here should be the regex" replace="" global="true" />  

和@ {文件}是INFACT C:\ WORK \修改文件\ TEST2 \ LIB \ MessageClass的-12.jar

样本例子上可以找到:http://ant-contrib.sourceforge.net/tasks/tasks/for.html

根据您的建议

最终的解决方案是:

  <!-- calculate jar name --> 
      <propertyregex override="yes" property="jarname" input="@{file}" regexp="-(\d*)\.jar" replace="" global="true"/> 
      <propertyregex override="yes" property="jarname" input="${jarname}" regexp=".*\\(\S*)\\" replace="" global="true"/> 
      <!-- calculate jar version --> 
      <propertyregex override="yes" property="jarversion" input="@{file}" regexp=".*\\(\S*)-" replace="" global="true"/> 
      <propertyregex override="yes" property="jarversion" input="${jarversion}" regexp=".jar" replace="" global="true"/> 
+1

你在用什么语言?使用某种'Path.Split'类型的函数来获取文件名可能会更好,然后使用字符串函数在'-'上进行分割(或者如果真的需要使用正则表达式) – Blorgbeard 2011-04-01 08:12:44

+0

我更新了问题,谢谢你的回应。 – 2011-04-01 08:25:10

回答

1
.*\\(\S*)-(\d*)\.jar 

这应该做的工作。

+0

如果您的jar文件是名称有空格我的正则表达式不起作用。 @detunized的正则表达式似乎更好。但是,如果jar文件没有像C:\ WORK \ Modify file \ test2679 \ lib \ castor-.jar 这样的版本号,那么正则表达式也不起作用。所以最好的正则表达式就是。* \\(。*) - (\ d *)\。jar在我看来 – Alptugay 2011-04-01 08:27:34

+0

完美,我的最终解决方案基于您的建议现在发布在问题中。 – 2011-04-01 08:43:59

1

试试这个:

/.*\\(.*)-(\d+)\.jar/ 

捕获1将有名字,并捕获2的版本号。

Rubular上的此示例。

+0

我会将名称部分的*改为\ w +并添加一个$,所以匹配从结尾开始:/.*\\(\w+)-(\d+)\.jar$/ – Chris 2011-04-01 08:22:53