Regex ColdFusion从文本文件中删除空行

Regex ColdFusion从文本文件中删除空行,regex,coldfusion,Regex,Coldfusion,我使用以下代码来更新robots.txt,这取决于特定页面是否标记为允许或不允许 <cflock type="exclusive" timeout="5"> <cfset vRemoveLine = ListContainsNoCase(robots,"Disallow: #sURL#", "#chr(13)##chr(10)#")> <cfif vRemoveLine> <cfset robots = ListDelet

我使用以下代码来更新robots.txt,这取决于特定页面是否标记为允许或不允许

<cflock type="exclusive" timeout="5">
    <cfset vRemoveLine = ListContainsNoCase(robots,"Disallow: #sURL#", "#chr(13)##chr(10)#")>
    <cfif vRemoveLine>
        <cfset robots = ListDeleteAt(robots, vRemoveLine, "#chr(13)##chr(10)#")>
    </cfif>
    <cffile action="write"
        file="#sitePath#robots.txt"
        output="#robots#"
        nameconflict="overwrite">
</cflock>

然而,它还没有完成和/或可以写得更好。具体地说,当删除一行时,它也不会删除其关联的回车符,如果该行位于除底部之外的任何位置,则更是如此

截图:

1) 在拆除管线之前

2) 拆线后


另请注意底部的附加空行。除了删除不允许的内容及其换行符之外,我还需要删除所有这些空行。

事实上,如果您更加关注您的代码,您只需

<cfset robots = robots.replaceAll( "(?m)^Disallow: #ReEscape(sURL)#(?:\r?\n|\z)" , "" ) />
(若要在CFML中使用该变量,请将其同时包装在cfsavecontent和cfoutput中,然后将结果变量放入
robot.replaceAll(此处为“”)


如果确实希望确保文件中没有多个换行符(无论与删除不允许的行相关的任何更改),最简单的方法是:

<cfset robots = robots.trim().replaceAll('\r','').replaceAll('\n{2,}','\n') />

它修剪两端,然后删除所有回车符,然后用一个换行符替换至少两个换行符的所有实例


(但一般来说,我可能建议在毛毯删除多个新行时使用更具体的表达式)

如果空行在结尾,但有时在中间。仍然想知道是否有一种方法可以从文本文档中的任何位置删除和删除整个空白行。太棒了,非常感谢Peter:-)
<cfset robots = robots.trim().replaceAll('\r','').replaceAll('\n{2,}','\n') />