如何按条件移动文档中指定列内容

  • Post author:
  • Post category:其他



关注本专栏,让您不写或少写代码就能解决日常生活中遇到的各种挠头的难题!!




网友提问:




我有这样一个文档:



图片



想要根据性别转成下述文档:



图片



文档内容较多,请帮忙解决这个问题,谢谢老师!!




红叶解答:




1.先替换第一行标题



图片



2.查找到所有性别是【女】的行



a)简单表达式



使用正则表达式【.*女】可以快速查找到,但这么简单的表达式会对后续替换造成影响。



图片



我们看这一行包含了姓名、制表符tab1、手机号、制表符tab2、性别。姓名和手机号将来是要拆出来放到新位置上去的,如果使用【.*】,姓名和手机号无法从匹配到的字符串中分离出来。



图片



b)表达式1



可以使用【(.+)\s*(\d{11})\s*女】进行匹配,这里的【\s】表示一个空白字符(空格,换行或tab键)。【\s*】表示空白字符有0个或多个。完整的意思是多个任意字符(作为姓名,保存到1号存储箱里备用),后面跟着0或多个制表符,之面跟着11位数字的手机号码(作为手机号,保存到2号存储箱里备用),然后跟着0或多个制表符,最后跟着固定的字符【女】。



图片



可能您会问:为什么上面的表达式不用【\s+】而用【\s*】,空白字符不是至少有一个吗?看了下面的图您就会明白了。



图片



c)验证表达式1



在【替换为】中输入【a$1$2b】,执行【全部替换】,会发现取到的姓名后有空格,证明标准表达式写的并不准确,这是为什么呢?



图片



这里有个正则表达式的贪婪匹配问题,【.+】可以匹配“黄蓉”,也可以匹配“黄蓉<空格< span=””>>”,也可以匹配“黄蓉<空格< span=””>><< span=””>空格>”,… … 如果不关闭贪婪匹配,会匹配姓名+手机号前的所有空格。



d)关闭贪婪匹配模式



在【查找目标】中输入【(.+?)\s*(\d{11})\s*女】,在【替换为】中输入【a$1$2b】,执行【全部替换】,发现姓名的空格已经不见了。



图片



关闭贪婪匹配模式很简单,就是在【.+】后面加个问号。



3.重新调整性别是【女】的行



在【替换为】中输入【\t\t\t\t\t\t\t$2\t\t\t$1】,执行【全部替换】,会发现性别是女的行已调整完成。



【\t】表示制表符,【$2】、【$1】表示从2号、1号存储箱中取回内容。



图片




注意:【替换为】中不支持正则表达式,所以在此框中如输入【\


t{7}


】、【\


s


】等正则表达式将不会起作用。\


r


,\


n


,\


t


等扩展字符不属于正则表达式中的元素。




4.删除性别是【男】的行中的性别列



在【查找目标】中输入【(.+?)\s*男】,在【替换为】中输入【$1】,执行【全部替换】。



【.+?】匹配“郭靖    13000000000”并存进1号存储箱,【\s*】匹配“男”前面的所有空白字符。



下图是最终处理后的结果。



图片


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


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

图片


为您推荐




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


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


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



版权声明:本文为redleaf1995原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。