没有云山雾罩的技术名词,没有讳莫如深的互联网黑话;关注本专栏,IT技术不再深不可攀,技术细节小白也能读懂!
这天上班不久,小白正在划水摸鱼。忽然接到了老板电话。
老板:“小白啊,有个从网上下载的文档,不知怎的,一段还没结束就换行了,你把这些换行问题上午解决了发给小刘,下午我需要!!”
不就是去除换行符嘛,小菜一碟。
小白打开文档,果然问题如老板所说。部分内容如下所示:

这似乎难不倒小白,他轻车熟路地打开Notepad++,选择菜单【搜索】->【替换…】,打开【替换】对话框。

小白作为”百度资深专家“,知道换行符是特殊字符,用“\r\n”来代替,还需要打开【查找模式】下的【扩展】选项。
在【查找目标】处填入“\r\n”,【替换为】处什么都不填,然后点击【全部替换】,顺利搞定,发给小刘,继续摸鱼… …

正当小白摸鱼进入佳境的时候,美女小刘阴着脸过来了!
小刘:“小白,你发的文档把所有行都删了,整个文档只有一行。你也不检查一下,快要到中午了,你赶紧把这问题解决一下。”
听了小刘的话,小白惊出一身冷汗。对啊,光顾着删除无用的换行符,结果将有用的换行符一并删除了。
怎么办呢,百度了十多分钟,小白脑袋里还是一堆浆糊。算了,一行一行改吧,可是当看到原始文档有9万多行的时候,小白绝望了!
在绝望中,小白忽然想到了他的好哥们,程序员小明。他用颤抖的手拨通了小明的电话,向小明倾诉了今天工作中受到的种种磨难,当然摸鱼那段情节肯定是要剪掉的。
小明:“小白,你用上次我教你的正则表达式,很容易解决啊!”
小白:“小明,上次是搜索特定的数据,这次是修改文档,正则表达式不能搞定吧!”
小明:”正则表达式功能强大到让你无法想象,比如说你现在遇到的问题!“
小白:“别卖关子,快说!“
小明:”你看看这些多余的换行和正常换行有什么区别?“
小白:“没区别,都是换行…”
小明:“别着急,仔细看…”
… …
小白:“我看出来了,正常换行都是句号(。)、感叹号(!)、引号(”)结尾,而且至少后面带着一空行。非正常的没有句号,感叹号和引号,后面不带空行。“
小明:“小白,你总结规律不仔细,你犯了两错误。第一,空行可能不止一个。第二,非正常换行后面也可能有空行的。“

小白:“还真是,那这样…这规律没法找啊!”
小明:“好找,我们将规律分为两种情况。第一种情况,以句号,感叹号,引号结尾的,但后面不带空行。”
小白:“那第二种情况呢?”
小明:“第二种情况,非句号,感叹号,引号结尾,可能带若干空行!”
小白:“这…这…这样的话,式子怎么写?”
小明:“当然能啦!我们一步一步地解决,先解决第1种情况。”
小明:“在【替换】对话框中,【查找目标】中输入【([。!”])\r\n([^\r])】,【替换为】中输入【$1$2】。再点击【全部替换】。”


小白:“真神了,真的替换了,这式子是什么意思啊!”
小明:“【([。!”])\r\n([^\r])】中,【[。!”]】代表句号,感叹号,引号任意一个字符,【\r\n】表示换行符,注意:换行符是两个字符。【[^\r]】里^表示非的意思,表示这个起始字符不是\r,意思就是说不是换行符。整体的意思表示查找句号、感叹号、引号后面跟着一个换行符再跟着一个不是换行符的字符串。【([。!”])\r\n([^\r])】中的两个括号,表示将查找到的字符串的两个子串部分保存起来,后面会使用到。”
小白:“哦,两个子串,第一个子串是句号,感叹号,引号。第二个子串是下一行不是换行符的那个字符,是吗?”
小明:“小白真聪明,一点就透!”
小白:“呃…我大概是明白了。那【$1$2】代表什么意思呢?”
小明:“刚才我说过,刚才有两个括号,将两个子串保存起来了。在这里就用上了,$1表示取出第一个子串,$2表示取出第二个子串。把它们拼在一起替换掉上面查找到的字符串。这样,是不是就去除掉换行符了?!!”
小白:“妙啊,真是完美!!那第二种情况怎么办呢?”
小明:“这也好办。在【替换】对话框中,【查找目标】中输入【([^。!”])(\r\n)+】,【替换为】中输入【$1】。再点击【全部替换】。”

小白:“太完美了,全部解决!!可是这式子代表什么意思呢?”
小明:“【([^。!”])(\r\n)+】中,看到句号,感叹号,引号前有一个^吗?这是取反的意思,就是说这个字符不是句号,感叹号,引号。【(\r\n)+】表示一个或多个换行符,这里的【+】表示至少有一个。替换为【$1】,就是第1个括号中保存起来的内容,所以表达式的意思是找到具有某些特征的字符串:这种字符串有一个或多个换行符,换行符前面不是句号,感叹号,引号。找到后只保留那个非句号,感叹号,引号的那个字符,其余的不要(即一个或多个换行符)。”
小白:“这…这…我怎么就想不到呢?”
小明:“认真学正则表达式吧,别整天摸鱼了!”
小白:”我是个对工作认真负责的人,上班哪能摸鱼!快到中午吃饭时间了,我把转好的文档发给小刘,然后请你吃鱼头泡饼,怎么样?“
小明:“还说没摸鱼…“


为您推荐:
