首页 > 编程 > regex > 正文

通过正则表达式删除空行的方法

2020-01-20 22:12:20
字体:
来源:转载
供稿:网友

我们的目标是要删除文本中的空行,可能一行也可能是多行。
所以,我的操作如下:
reg3.PNG
在此,我们匹配空行用的是
(/r/n)*
这样,就可以匹配多个空行,同时用null来替代,就可以实现删除空行。此方案是基于对/r和/n的使用。

以前在网上看到一种实现是:
/n[/s| ]*/r
匹配之后,用null替代,也可以实现删除空行,效果如下图:
reg4.PNG
两种方案都能实现相同的效果。

如果有其他的不同理解,请发表评论,大家共同进步。

我又做了以下测试,如下图:
reg5.PNG
仅用了
/n/r
就完全实现了删除所有的空行,因为在每一个空行的开头和结尾都是
/n/r
所以,删除了上一行之后,当前行还有一个/n/r,同样能够匹配上,所以,还要在做替代操作。这样,就可以删除所有的空行了。
那,如果是
/r/n,效果如何呢?
我又做了一下测试,效果如下图:
reg6.PNG
这个就不是我们想要的结果.为什么呢?
我想,我们可以这样理解,
C:/Program Files/Common Files/Relive.dll

C:/Program Files/Common Files/svchost.exe

C:/Program Files/Internet Explorer/msvcrt.bak
C:/Program Files/Internet Explorer/msvcrt.dll

C:/Program Files/Internet Explorer/msvcrt.ebk

C:/WINNT/system32/drivers/npf.sys
C:/WINNT/system32/wpcap.dll
C:/WINNT/system32/Packet.dll
C:/WINNT/system32/WanPacket.dll

C:/Documents and Settings/User name/Local Settings/Temp/wmso.exe
C:/Documents and Settings/User name/Local Settings/Temp/BCG5.tmp

这个是原始文本,其实,在我们进行文本处理的时候,我们可以这样把空行,用
/r/n(回车换行,先回车,后换行)
来替换掉.文本就是:
C:/Program Files/Common Files/Relive.dll/r/n/r/nC:/Program Files/Common Files/svchost.exe/r/n/r/nC:/Program Files/Internet Explorer/msvcrt.bak/r/nC:/Program Files/Internet Explorer/msvcrt.dll/r/n/nC:/Program Files/Internet Explorer/msvcrt.ebk/r/n/r/n/r/n/r/nC:/WINNT/system32/drivers/npf.sys/r/nC:/WINNT/system32/wpcap.dll/r/nC:/WINNT/system32/Packet.dll/r/nC:/WINNT/system32/WanPacket.dll/r/n/r/nC:/Documents and Settings/User name/Local Settings/Temp/wmso.exe/r/nC:/Documents and Settings/User name/Local Settings/Temp/BCG5.tmp/r/n/r/n/r/n

这一段文本是一个整体,没有回车,没有空隙和间隔,这是我们正在处理的文本,只不过回车换行是不可见字符,所以就不能看到,但是还是存在的.
所以,在处理的时候才会出现我们上面的情况.
有此,我们可以理解为什么
用/r/n匹配和替代后,
所有的/r/n都没有了,所以,文本,就成为了一个连接的纯字符文本了.
但是
/n/r
替换后,
中间的所有的/n/r都替代掉了,/r(/n/r……/n/r)/n,中间的部分都替代掉了。所以就剩最后的一个/r/n.

以上是我的一点理解。

PS:这里再为大家提供2款本站的正则表达式在线工具供大家参考使用:

JavaScript正则表达式在线测试工具:http://tools.VeVB.COm/regex/javascript

正则表达式在线生成工具:http://tools.VeVB.COm/regex/create_reg

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表