[英]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" />
这应该删除所有空行和仅包含空格的行。
以下内容适用于Windows和Unix / Linux EOL字符,并且将替换匹配(空行),而不是替换第一个捕获组\\ 1:
<replaceregexp file="${outputFile}" match="^\s*\r?\n" flags="g" replace="" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.