免费注册 查看新帖 |

Chinaunix

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

[文本处理] 【已解决】求个正则表达式 [复制链接]

论坛徽章:
8
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:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-11-28 16:12 |只看该作者 |倒序浏览
本帖最后由 cfwyy 于 2019-06-11 08:45 编辑

有个字符提取的需求,想用正则做,但正则学的还不到家,看能不能向坛子里的大神求一个。
有一串文本:

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

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

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

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

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



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

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

论坛徽章:
8
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:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
2 [报告]
发表于 2017-11-28 16:17 |只看该作者
第一次发帖,我的注册时间怎么是 unix 元年啊 哈哈,虽然这个账号注册了也应该有好几年了。

论坛徽章:
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
3 [报告]
发表于 2017-11-28 16:18 |只看该作者
回复 1# cfwyy

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

论坛徽章:
8
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:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
4 [报告]
发表于 2017-11-28 16:34 |只看该作者
回复 3# jason680

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

论坛徽章:
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
5 [报告]
发表于 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

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-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-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
6 [报告]
发表于 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

论坛徽章:
8
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:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
7 [报告]
发表于 2017-11-29 09:17 |只看该作者
回复 5# jason680

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

论坛徽章:
8
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:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
8 [报告]
发表于 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
9 [报告]
发表于 2017-11-29 13:04 |只看该作者

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-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-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
10 [报告]
发表于 2017-11-29 17:06 |只看该作者
回复 8# cfwyy


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

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP