移除大文档中多余的口头禅

没有云山雾罩的技术名词,没有讳莫如深的互联网黑话;关注本专栏,IT技术不再深不可攀,技术细节小白也能读懂!

今天上班刚进公司,小白就看见了一向晚到公司的老板,心里觉得不妙,果不其然,小白位子还没坐稳,老板就叫小白过去。

老板手里拿着一份打印出来的文档,是一篇采访稿,采访的作家有口头禅,说话比较啰嗦,因此,老板几天前让小白去掉文档里面的口头禅,说直白点儿,就是让小白去除每句开头有“比如说”,结尾有“这样”的句子。

老板:“小白啊,前几天我给你一份文档,让你处理下,好几天功夫,你就处理成这样啊!”

小白:“老板,我按您要求的,把文档里【比如说】和【这样】中间的文字全都删了。”

老板重重地把采访稿摔在桌上,说:“我强调了多遍,是每句开头的【比如说】和结尾的【这样】,不是让你将【比如说】和【这样】中间文字全删掉,考虑掉这个采访稿很重要,内容有很多,给了你五天时间,好好整理。你倒好,把有用的内容全删掉了,我只给你半天功夫,搞不好你走人,你叔打电话也没用!小刘,你看着他,别让他偷懒!”

老板生气地离开了,小刘对小白说:“这么多内容,你能做完吗,要不我多找点人来帮你!!“

小白说:“不用了,我自己能搞定!“

小白心情沉重地回到座位上,给好哥们小明打电话。

小白:“小明,我快要失业了!“

小明:“怎么了,小白,一大早的发什么神经!“

小白:“我把老板交待的任务搞砸了… …”

小明了解到大概的情况后,问:”小白,你是怎么去除口头禅语的啊?“

小白:“我用的正则表达式啊?“

小明:“哦,说说看!”

小白:“我的替换目标表达式是【比如说.+这样。】,替换为表达式是【】。【.+】句点表示任意非空字符串,这个表达式没问题吧,我研究很长时间呢!”

图片

小明:“这是你研究的?这么说以后搞科研上百度搜就可以啦!”

小白:“呃… …小明,你不要取笑我啦,我这个表达式有什么问题,帮忙修改下。”

小明:“我们一步步来吧,先把要删除的内容找出来,稍等会儿,我先做个示例!”

图片

小明:“示例内容中,只有两句是要清除的口头禅,其他的都不是。”

小明:“再看看小白你的正则表达式,要清除的内容。”

图片

小白:“不看不知道,一看吓一跳。原来清除了这么多有用的内容。我是没招了,小明,你不帮我,我就失业啦!”

小明:“我们先看下文本串D,按理说,这个不应该被正则表达式查到并删除吧,但它为什么会被搜索到呢?”

图片

小白:“这个我也不太清楚,会不会和后面的【这样。】有关系?”

小明:“是的,正则表达式中有个术语,叫【贪婪匹配】。句点(.)表示除换行符外的任意字符。它先找到1处【这样。】前的字符C,但它仍不满足,接着找,找到了2处【这样。】前的F,仍不满足,找到了3处【这样。】前的K。所以【.+】就一直从B匹配到了K。”

小白:“后面还有M、N呢,为什么不继续贪婪下去?”

小明:“L之后是换行符了,句点匹配不上了!“

小白:“是这样啊,那如果我不想贪婪怎么办呢?”

小明:“【非贪婪匹配】很简单,只要在【.+】后加个【?】就行。”

图片

小白:“可以了,不过我感觉收效甚微啊,其他问题怎么办呢?”

小明:“别急,慢慢来!你看下HIJ之间的句号,因为中文句号匹配句点(.),所以导致匹配出错,应当排除。”

小白:“怎么排除?”

小明:“用【[^。]+?】代替【.+?】,方括号里面每一个元素都匹配一个字符,若方括号内第一位是【^】,则表示对括号内元素取反。【[。]】表示只匹配句号,【[^。]】表示匹配不是句号的字符。”

图片

小白:“你这么解释我就明白了。我百度的时候也看到了,只是没弄明白什么意思。还剩E和F那句怎么保留下来。”

小明:“这个需要判断【比如说】前面的字符了,按你老板的意思,每一句的开头是【比如说】方可匹配,所以【比如说】前面应该是句号,而不应该是逗号,所以应该在【比如说】前加个句号。”

图片

小白:“托您的福,E、F保留了,可是e、f、g也跟着保留下来了!”

小明:“你分析下,是什么原因呢?”

小白:“e、f、g处的【比如说】是一行的开始,前面没有句号,只有换行符。”

小明:“在正则表达式中,一行的开始用【^】来表示,注意这里的【^】与放在方括号内的【^】意义不同。所以,表达式应当改为【(^|。)比如说[^。]+?这样。】”

图片

小白:“找是找到了,可是【(^|。)】是什么意思啊?”

小明:“【|】是或者的意思,【(^|。)比如说[^。]+?这样。】表示匹配【^比如说[^。]+?这样。】或【。比如说[^。]+?这样。】。如不加括号,【^|。比如说[^。]+?这样。】表示匹配【^】或【。比如说[^。]+?这样。】,意义完全不一样。”

小白:“明白了,可是执行替换时会将A后面的句号给清掉啊,这怎么办呢?”

小明:“小白,我以前和你说过,括号有保存子串的作用吧,我们将保存起来的内容再取回来就可以了。”

小白:“怎么取?”

小明:“将【替换为】表达式填入【$1】就可以了,表示将保存的第1个子串取回来。”

图片

小白:“太棒了,问题终于解决了!…”

小明:“好了,你不会失业了,该请我吃饭了!“

小白:“好啊,鱼头泡饼…“

小明:“快别提鱼头泡饼了,你都忽悠我好几回了!!… …”

图片

觉得不错的小伙伴记得转发关注哦,后续会持续更新相关技术文章!

如果您遇到业务处理相关的技术难题,欢迎留言,我会尽力解答!!

图片

为您推荐

移除大文档中非必要的换行符

找出大文档中的所有手机号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值