关注本专栏,让您不写或少写代码就能解决日常生活中遇到的各种挠头的难题!!
网友提问:
我有这样一个文档:
想要根据性别转成下述文档:
文档内容较多,请帮忙解决这个问题,谢谢老师!!
红叶解答:
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*】匹配“男”前面的所有空白字符。
下图是最终处理后的结果。
觉得不错的小伙伴记得转发关注哦,后续会持续更新相关技术文章!
如果您遇到业务处理相关的技术难题,欢迎留言,我会尽力解答!!
为您推荐
: