免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3945 | 回复: 10
打印 上一主题 下一主题

怎么在一些既有数字,又有文字的表格中,剔除文字前面的数字 [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-03 16:43 |只看该作者 |倒序浏览
本帖最后由 赛萌 于 2016-03-03 18:25 编辑

两列表格如下:
7元/斤       空
10元一斤    空
8.89元1斤  空
28   1个
30/个 约1500g
34        约2斤
6.8/0.9kg 空
24/2斤  空
24元2斤  空
24元两斤  空



怎么提取出干净的数据:
7       空
10     空
8.89   空
28     1个
30     约1500g
34     约2斤
6.8  空  0.9kg
24   空    2斤
24  空   2斤
24  空  两斤
其实目的是为了求出单价,这个里面按斤数的比较多,就把按个算的,但是没有斤数的最终给剔除了。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2016-03-03 16:58 |只看该作者
本帖最后由 jason680 于 2016-03-03 16:59 编辑

回复 1# 赛萌

$ cat FILE
7元/斤       空
10元一斤    空
8.89元1斤  空
28   1个
30/个 约1500g
34        约2斤


$ perl -pe '{s/([\d.]+)\S*/$1/}' FILE
7       空
10    空
8.89  空
28   1个
30 约1500g
34        约2斤




   

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
3 [报告]
发表于 2016-03-03 17:03 |只看该作者
回复 2# jason680


    谢谢!也谢谢指点,看来我的水平还是差太多啊。

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
4 [报告]
发表于 2016-03-03 17:03 |只看该作者
回复 2# jason680


    谢谢!也谢谢指点,看来我的水平还是差太多啊。

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
5 [报告]
发表于 2016-03-03 17:05 |只看该作者
回复 2# jason680


    恩,最主要的是我想到了替换,但是没想到$1,准确来说是不会

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
6 [报告]
发表于 2016-03-03 17:42 |只看该作者
回复 2# jason680


    还有一种情况,我刚才没有考虑到是 23/1.5kg  空   这种改怎么半啊  这个kg数是得提取出来的,因为后面要计算单价用23除于1.5kg

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-03-04 09:10 |只看该作者
回复 6# 赛萌
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. while (<DATA>){
  5.         s!(\/|两)!$1 eq '/' ? '=' : 2!e;
  6.         if (m/(?:2斤|kg)(?!\Z)/ and s/(?:=|元)(\S*)\s*(\S*)/\t$2\t$1/){
  7.                 print;
  8.                 next;
  9.         }
  10.         print if (s/\A([\d.]*)\S*/$1/);
  11. }

  12. __DATA__
  13. 7元/斤       空
  14. 10元一斤    空
  15. 8.89元1斤  空
  16. 28   1个
  17. 30/个 约1500g
  18. 34        约2斤
  19. 6.8/0.9kg 空
  20. 24/2斤  空
  21. 24元2斤  空
  22. 24元两斤  空
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2016-03-04 09:16 |只看该作者
测试环境 => Win7, 输出结果如下:
  1. 7       空
  2. 10    空
  3. 8.89  空
  4. 28   1个
  5. 30 约1500g
  6. 34        约2斤
  7. 6.8     空      0.9kg
  8. 24      空      2斤
  9. 24      空      2斤
  10. 24      空      2斤
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2016-03-04 09:31 |只看该作者
回复 6# 赛萌

$ cat FILE
7元/2       空
8.891  空
30/个 约1500g
23/1.5kg  空
34        约2斤

$ perl -pe '{s|^([\d.]+)[^\s\d]+([\d.]+)\S*|$1/$2|e;s/([\d.]+)\S*/$1/}' FILE
3.5       空
8.89  空
30 约1500g
15.3333333333333  空
34        约2斤

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-03-04 12:42 |只看该作者
本帖最后由 sunzhiguolu 于 2016-03-04 12:48 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. while (<DATA>){
  5.         s/两/2/;
  6.         s!([\d.]*)(g|kg)!$2 eq 'g' ? sprintf ("%.2f斤", $1 / 500) : sprintf ("%.2f斤", $1 * 2)!e;
  7.         s!\A([\d.]*)\D*([\d.]*)斤\N*!join ("\t", sprintf ("%.2f", $1 / $2), '空')!e;
  8.         print;
  9. }

  10. __DATA__
  11. 30/个 约1500g
  12. 34        约2斤
  13. 6.8/0.9kg 空
  14. 24/2斤  空
  15. 24元2斤  空
  16. 24元两斤  空
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP