我已经发布到2个论坛(CodeRanch和nabble)并且没有人回复了答案....所以堆栈溢出......你是我最后的希望。我要做的就是使用Ant任务从文件中删除“\ n”。文件中只有一堆空行,我不再需要它们了......这是我用过的代码..
<replaceregexp file="${outputFile}"
match="^[ \t\n]+$"
replace=""
byline="true"/>
它没有拿起正则表达式,我尝试了一百种不同的方法,我无法弄明白。有什么想法吗?
答案 0 :(得分:12)
您可以使用FilterChain(特别是IgnoreBlank TokenFilter)来完全按照您的需要进行操作:
<copy file="${input.file}" toFile="${output.file}">
<filterchain>
<ignoreblank/>
</filterchain>
</copy>
ignoreblank
也会删除完全由空格组成的行,但是查看正则表达式似乎就是你想要的。
答案 1 :(得分:5)
这有效:
<replaceregexp file="..."
match="(\r?\n)\s*\r?\n"
flags="g"
replace="\1" />
重点是手动和全局匹配线端(flags="g"
)。
答案 2 :(得分:1)
我认为您的问题在于使用行尾/行尾字符。您正在寻找的是空行,但您的正则表达式似乎要搜索的是行首,后跟一个或多个新行和/或制表符,后跟行尾。难道它不应该是行首,其后是行尾,而两者之间什么都没有?所以匹配=“^ $”。
^以上假设你正在使用的正则表达式引擎将^ $视为行的开始/结束而不是整个输入字符串的开始/结束。如果它是整个输入字符串,那么你的正则表达式只匹配空文件,而不是包含某些内容但也包含一些空白行的文件。
答案 3 :(得分:1)
您可以使用<filterchain>
,只读取第一行并删除所有换行符。例如:
<loadfile property="new.property" srcfile="${input.file}">
<filterchain>
<headfilter lines="1" />
<striplinebreaks />
</filterchain>
</loadfile>
答案 4 :(得分:0)
来自文档:
与regexp类型映射器类似,此任务需要一个支持正则表达式库和org.apache.tools.ant.util.regexp.Regexp的实现
你有这些吗?
答案 5 :(得分:0)
空白行的正确正则表达式是
^[ \t]*$\r?\n
您可能必须转义字符串中的反斜杠,如下所示:
match="^[ \\t]*$\\r?\\n"
答案 6 :(得分:0)
尝试以下正则表达式:
<replaceregexp file="${outputFile}"
match="^\s*\n"
replace=""
byline="true" />
那应该删除所有空行和仅包含空格的行。
答案 7 :(得分:0)
答案 8 :(得分:0)
以下内容适用于Windows和Unix / Linux EOL字符,并且将替换匹配(空行),而不是替换第一个捕获组\ 1:
<replaceregexp file="${outputFile}" match="^\s*\r?\n" flags="g" replace="" />