正则再解决一点问题
今天同事有点小事问了我一下,他在查一些公司资产的信息,网页上是一张表,有设备编号,资产编号,公司名字,币种,价格什么的。不过见鬼的是这个网页看起来是做得蛮好的,但是不提供导出。。。
于是就尴尬了,只能手动拷贝一堆数据出来,贴在notepad++里面一看,都是空格分隔的,用Excel导入一下,惨不忍睹。
比如说有一列是这样的,5项数据分别是设备编号,资产编号,公司名字,币种,价格:
| 设备编号 | 资产编号 | 公司名称 | 币种 | 价格 |
|---|---|---|---|---|
| 1234565 | 903414 | xxx xx xxxx Co., ltd | EUR | 123456 |
然后导入Excel用空格隔开之后,公司名字里面的空格也被华丽丽的分开了。
然后就有点郁闷,还试了用Excel的flash fill,也不行,在第一步分隔设备编号的时候就有问题了。
后来同事自己忙乎了一会,没什么好办法,我脑子突然抽了一下,发现我们都把问题复杂化了,然后用最简单的方法试了一下,成功了。。。
本来么也就这样结束了,但是想想其实这个应该也可以用正则来解决,正好训练一下自己的正则的使用吧。
两个思路,一个是吧所有的字段前面加一个特殊符号,然后Excel里面用这个特殊符号来切。
一共才只有5个字段,所以其实做起来还好。
五个字段的特点是:
设备编号:数字和字母的组合,不过这个是第一个字段,所以其实也没什么要紧,能把下面的区分开来就好
资产编号:9开头的6位数字,这个最简单,我直接都能写出来 ^9\d{5}$ 结束
公司名称:这个比较麻烦,基本上是一串字母,里面有空格,还有符号
币种:三位大写的数字,这个也简单 ^[A-Z]{3}$ 结束
价格也简单: 就是数字但是要和前面的资产编号什么的区别开来
要区分已经蛮简单了,
查找 (^9\d{5}$ )和(^[A-Z]{3}$ ),然后用\@\1\@来替换,这样一来直接在资产编号和币种前后加了@,然后Excel里面用@来切一下就好
想了想试了试,另外几个的正则也可以写,比如公司名称的,是数字后面的一个空格之后开始,以Ltd结束的:
\d\s.+Ltd
当然了,还有一个思路,可以去匹配公司名称里面的空格嘛,都替换成-之类的,然后用Excel切开来之后再替换回空格么就好了。
这样写的话,正则可以这么写:
\d\s\S+\s\S+Ltd
一种问题,两个思路,两种解决,感觉不错。
至于怎么简单的解决的嘛,我让他试着在网页上直接拷贝了,在Excel里面Ctrl V了一下,规规矩矩的表就被拷贝下来了。。。Excel还是蛮聪明的。

