2012-11-27 202 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由兩個過濾器來完成。