繁体   English   中英

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

[英]Deleting new lines with regular expression from Ant task

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

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

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

您可以使用一个FilterChain (具体为IgnoreBlank TokenFilter )做的正是你所需要的:

<copy file="${input.file}" toFile="${output.file}">
  <filterchain>
    <ignoreblank/>
  </filterchain>
</copy>

ignoreblank还将删除完全由空格组成的行,但是查看正则表达式似乎就是你想要的。

这有效:

<replaceregexp file="..."
               match="(\r?\n)\s*\r?\n" 
               flags="g"
               replace="\1" />

重点是手动和全局匹配行结束( flags="g" )。

我认为您的问题在于使用行尾/行尾字符。 您正在寻找的是空行,但您的正则表达式似乎要搜索的是行首,后跟一个或多个新行和/或制表符,后跟行尾。 难道它不应该是行首,其后是行尾,而两者之间什么都没有? 所以匹配=“^ $”。

^以上假设您正在使用的正则表达式引擎将^ $视为行的开始/结束而不是整个输入字符串的开始/结束。 如果它是整个输入字符串,则正则表达式只匹配空文件,而不是包含某些内容但也包含一些空行的文件。

您可以使用<filterchain> ,仅读取第一行并删除所有换行符。 例:

<loadfile property="new.property" srcfile="${input.file}">
    <filterchain>
        <headfilter lines="1" />
        <striplinebreaks />
    </filterchain>
</loadfile>

从文档:

与regexp类型映射器类似,此任务需要一个支持正则表达式库和org.apache.tools.ant.util.regexp.Regexp的实现。

你有这些吗?

空行的正确正则表达式是

^[ \t]*$\r?\n

您可能必须转义字符串中的反斜杠,如下所示:

match="^[ \\t]*$\\r?\\n"

请尝试以下正则表达式:

<replaceregexp file="${outputFile}"
    match="^\s*\n"
    replace=""
    byline="true" />

这应该删除所有空行和仅包含空格的行。

你试过flags =“g”选项吗?

g - 全球变化

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM