从Ant任务中删除带有正则表达式的新行

时间:2009-11-19 19:19:13

标签: regex ant newline

我已经发布到2个论坛(CodeRanch和nabble)并且没有人回复了答案....所以堆栈溢出......你是我最后的希望。我要做的就是使用Ant任务从文件中删除“\ n”。文件中只有一堆空行,我不再需要它们了......这是我用过的代码..

    <replaceregexp file="${outputFile}"
     match="^[ \t\n]+$"
     replace=""
     byline="true"/>

它没有拿起正则表达式,我尝试了一百种不同的方法,我无法弄明白。有什么想法吗?

9 个答案:

答案 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)

您是否尝试过flags =“g”选项?

g - 全球变化

供参考 http://ant.apache.org/manual/Tasks/replaceregexp.html

答案 8 :(得分:0)

以下内容适用于Windows和Unix / Linux EOL字符,并且将替换匹配(空行),而不是替换第一个捕获组\ 1:

<replaceregexp file="${outputFile}" match="^\s*\r?\n" flags="g" replace="" />