zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0

我们的目标是要删除文本中的空行,可能一行也可能是多行。
所以,我的操作如下:
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.

以上是我的一点理解。



|----------------------------------------------------------------------------------------|
                           凯发k8网页登录的版权声明  凯发k8网页登录的版权所有 @zhyiwww
            引用请注明来源 http://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2007-09-18 10:26 zhyiwww 阅读(26948) 评论(11)     所属分类: 正则表达式

feedback:
# re: 正则表达式删除空行
2008-10-01 14:10 |
{因为在每一个空行的开头和结尾都是。。。}

高明,可见作者其理解之 深,思维之巧。
妙哉  回复  
  
# re: 正则表达式删除空行
2009-05-07 17:36 |
你这是什么正则,用在js上不灵光的  回复  
  
# re: 正则表达式删除空行
2010-05-09 21:13 |
谢谢你的文章,受教啦
我用regexbuddy测过了,无论javascript还是java语言,\n\r都可以去除纯粹的空行,即一行中从行头到行尾只有\n\r(不包含空格和制表位这样的空白位)。
对于含有空格或制表位的“空”行,\n[\s| ]*\r可以全部去除。  回复  
  
# re: 正则表达式删除空行[未登录]
2010-06-24 12:11 |
你的方法很明显不对, 不知道你怎么测试的。。  回复  
  
# re: 正则表达式删除空行
2011-08-03 09:02 |
如果只是删除空行,而不删除下一行前边的空格,还保持原格式,只是删除其中的空行,不让都左对齐。我记得好像有个[],有个做的到。  回复  
  
# re: 正则表达式删除空行[未登录]
2011-08-16 16:31 |
javascript可以通过。

程序没有问题  回复  
  
# re: 正则表达式删除空行
2012-02-22 23:48 |
看君一帖胜读好多天的书啊,谢谢。  回复  
  
# re: 正则表达式删除空行[未登录]
2013-04-15 16:27 |
不错!支持了  回复  
  
# re: 正则表达式删除空行
2013-06-08 16:36 |
我想知道怎么用这个工具写个正则表达式来删除文本里边的汉字和特殊符号 只保留英文字母  回复  
  
# re: 我的经验正则表达式删除空行[未登录]
2015-01-28 10:29 |
我正在匹配的空行用网上各种方法仍然不行,可能含有特殊字符,只好自己想,用下列方法可以匹配任意特殊看不到文字的空行(^\s*|\s*|\s*$),不敢自己享用,与大家分享  回复  
  
# re: 正则表达式删除空行
2015-04-23 20:31 |
不管是\n\r 还是 \n[\s| ]*\r,都无法删除文件开始的空行,算个bug吧  回复  
  

只有注册用户后才能发表评论。


网站导航:
              
 
网站地图