2012-11-27 164 views
3

我想获取.doc文件名并将其保存在下一个属性(pdf.name)中。使用正则表达式我想删除所有的空格中的.doc文件名,并从该改造它:ANT删除空格正则表达式

NAME FILE.doc 

要这样:

NAMEFILE.pdf 

这是我的代码:

<propertyregex override="yes" property="pdf.name" input="@{remoteDocToPdf}" 
    regexp="\.*([[^/]+$^\.]*)\.doc" select="\1.pdf" casesensitive="true" /> 
+1

'@ {remoteDocToPdf}'的'input'是否携带'/ var/run/myapp/NAME FILE.doc'这样的绝对路径,或者只是一个像'NAME FILE.doc'这样的文件名? – zb226

+0

嗨zb226,它只是文件名。名称文件XXX XXX.doc –

+0

请参阅http://stackoverflow.com/questions/1176071/replacing-characters-in-ant-property –

回答

1

如果@{remoteDocToPdf}仅携带文件名而不是绝对路径,则可以通过在您发布的指令后添加此指令来删除文件名中的空格:

<propertyregex override="yes" property="pdf.name" input="${pdf.name}" 
    regexp=" " replace="" global="true" /> 

这是无法删除的空间,做.doc - >.pdf改造一气呵成,因为你只能要么指定selectreplace<propertyregex...

编辑1:我错过添加global="true"上述之外,所以只有第一空间将已被替换(根据documentation,至少)。

编辑2:在便笺上的<propertyregex...你张贴 - 我敢肯定,正则表达式\.*([[^/]+$^\.]*)\.doc是不是真的你想要什么,尽管它可能看起来如预期工作。从你的评论我猜你只是想用.pdf取代.doc。在这种情况下,请改用此:

<propertyregex override="yes" property="pdf.name" input="@{remoteDocToPdf}" 
    regexp="\.doc$" replace=".pdf" /> 

如果你想在正则表达式读了,我可以推荐阅读this tutorial

+0

非常感谢! –

+0

不客气 - 如果我的回答对你有帮助,请接受它:) – zb226

1

你可能会考虑使用Ant resources来做到这一点。这可能是接近你所需要的:一个是删除空间,和一个文件扩展名更改:

<loadresource property="pdf.name"> 
    <string value="${remoteDocToPdf}" /> 
    <filterchain> 
     <deletecharacters chars=" " /> 
     <replaceregex pattern=".doc$" replace=".pdf" /> 
    </filterchain> 
</loadresource> 

这项工作正在由filterchain由两个过滤器来完成。