免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1653 | 回复: 9

[文本处理] 求个正则表达式 [复制链接]

论坛徽章:
5
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:40
发表于 2017-11-28 16:12 |显示全部楼层
有个字符提取的需求,想用正则做,但正则学的还不到家,看能不能向坛子里的大神求一个。
有一串文本:

*电子类*   *电阻01*    *贴片    0805*   *电阻  IDN101620050250*   

想用两个正则分别提取两种  *号之间的 文本,*号间可能出现的字符是汉字, 英文字母, 数字, 空格:

1. *号间 没有 “IDN.”这一串的,  其中IDN是固定的,后面是12个数字。

结果如:
电子类
电阻01
贴片    0805

2. *号间 有 “IDN.”这一串的
结果如:
电阻  IDN101620050250



这种 我会写   \*[\w\u4e00-\u9fa5\x20]+IDN\d{12}\*  
但第一种我不会,不知道 怎么把有 IDN... 这样特定的给排除掉。

看大神们能不能赐个第一种的正则 或教个思路,谢谢!

论坛徽章:
5
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:40
发表于 2017-11-28 16:17 |显示全部楼层
第一次发帖,我的注册时间怎么是 unix 元年啊 哈哈,虽然这个账号注册了也应该有好几年了。

论坛徽章:
130
技术图书徽章
日期: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
发表于 2017-11-28 16:18 |显示全部楼层
回复 1# cfwyy

方法很多,接下来要做什么?

论坛徽章:
5
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:40
发表于 2017-11-28 16:34 |显示全部楼层
回复 3# jason680

接下来 很有可能是要 换个存储方式,内容写到access数据库 或者 写到XML  文件  还没确定好。
我现在的想法是 把 前面的类和小类   和后面具体的条目分别提取出来再说,请大神赐教一下,谢谢!

论坛徽章:
130
技术图书徽章
日期: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
发表于 2017-11-28 18:05 |显示全部楼层
本帖最后由 jason680 于 2017-11-28 18:18 编辑

回复 4# cfwyy

$ awk -F'\\*' '{for(n=2;n<NF;n+=2)if($n!~/IDN/)print $n}' FILE
电子类
电阻01
贴片    0805

$ awk -F'\\*' '{for(n=2;n<NF;n+=2)if($n~/IDN/)print $n}' FILE
电阻  IDN101620050250

论坛徽章:
21
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59
发表于 2017-11-28 21:23 |显示全部楼层
回复 1# cfwyy


  1. echo "*电子类*   *电阻01*    *贴片    0805*   *电阻  IDN101620050250*"|awk 'BEGIN{RS="\\* +\\*"}$0!~/IDN/{gsub(/^*/,"");print}'
复制代码

输出:
电子类
电阻01
贴片    0805

  1. echo "*电子类*   *电阻01*    *贴片    0805*   *电阻  IDN101620050250*"|awk 'BEGIN{RS="\\* +\\*"}/IDN/{gsub(/*.*$/,"");print}'
复制代码

输出:
电阻  IDN101620050250

论坛徽章:
5
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:40
发表于 2017-11-29 09:17 |显示全部楼层
回复 5# jason680

谢谢!可以用!不用awk, 只用单纯的正则表达式  可以匹配吗?

论坛徽章:
5
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:40
发表于 2017-11-29 09:19 |显示全部楼层
回复 6# wh7211

谢谢!好用的。如不用awk  只用单纯正则 可以匹配出来吗?

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-11-29 13:04 |显示全部楼层

论坛徽章:
21
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59
发表于 2017-11-29 17:06 |显示全部楼层
回复 8# cfwyy


可以,用PCRE:
  1. echo "*电子类*   *电阻01*    *贴片    0805*   *电阻  IDN101620050250*"|grep -Po '(^| +)\*\K[^A-Z\*]+(?=\*)'
复制代码

输出:
电子类
电阻01
贴片    0805
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

基于案例的 SQL 优化实战训练营

讲师:中电福富特级专家梁敬彬,参与本次课程培训,你将收获:
1. 能编写出较为高效的 SQL;
2. 能解决70%以上的数据库常见优化问题;
3. 能得到老师提供的高效的相关工具和解决方案;
4. 能举一反三,收获不仅仅是 SQL 优化。
现在购票享受8.8折优惠!
----------------------------------------
优惠时间:2019年3月20日前

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP