Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3252|回复: 9

[已解决]关于正则匹配

[复制链接]
发表于 2016-2-25 12:03 | 显示全部楼层 |阅读模式
本帖最后由 QCW911 于 2016-2-25 12:47 编辑

大家早上好
关于正则匹配
EM-QT-GQT-02-150004-盘古数据9号楼冷却塔材料采购
EM-QT-GQT-02-150037-8号楼冷却塔(加利)采购
QT-GDK-0202-150001-001-盘古数据9号楼10KV外线电源工程(两站各一回路)项目-自购材料

匹配后的结果
EM-QT-GQT-02-150004                     盘古数据9号楼冷却塔材料采购
EM-QT-GQT-02-150037                      8号楼冷却塔(加利)采购  
..........
如何把前面的号和后面的汉字匹配出来?
最佳答案
2016-2-25 15:59
QQ截图20160225154019.jpg

Range("a:a").Replace "*-*-*-*-*-", ""
可得到 后半部分。
再替换掉原数据里的后半部分,可得到 前半部分。




我觉得把表达式分为多块,方便检查和修改。
        str1 = "^[A-Z]{2}\-"
        str2 = "[A-Z]{2,3}\-"
        str3 = "[0-9A-Z]{3,4}\-"
        str4 = "\d{2,6}\-"
        str5 = "\d{3,6}\-"
        .Pattern = str1 & str2 & str3 & str4 & str5
只看这16行数据,能不能简化?得看 前半部分的各部分是怎样定义的(即允许怎样,不允许怎样)


发表于 2016-2-25 12:14 来自手机 | 显示全部楼层
正则很少用,来学习的。
不知匹配后是什么结果,建议用附件表达。
回复

使用道具 举报

 楼主| 发表于 2016-2-25 12:43 | 显示全部楼层
爱疯 发表于 2016-2-25 12:14
正则很少用,来学习的。
不知匹配后是什么结果,建议用附件表达。

就是想吧前面的号 和 后面的文字 分开
不用正则也行
回复

使用道具 举报

 楼主| 发表于 2016-2-25 12:45 | 显示全部楼层
附件送付,不用正则也行

正则匹配.zip

7.39 KB, 下载次数: 10

回复

使用道具 举报

发表于 2016-2-25 13:09 | 显示全部楼层
([a-z\d-]+)\-([^\r\n]+)
这个试下,提取分组内容即可
回复

使用道具 举报

 楼主| 发表于 2016-2-25 13:19 | 显示全部楼层
kevinch 发表于 2016-2-25 13:09
([a-z\d-]+)\-([^\r\n]+)
这个试下,提取分组内容即可

没成功  字母都是大写 ([A-Z\d-]+)\-([^\r\n]+)
也不行
回复

使用道具 举报

发表于 2016-2-25 13:24 | 显示全部楼层
这些是很有规律的字符串
用第5个"-"分割一下就可以了,
根本用不着正则。
回复

使用道具 举报

 楼主| 发表于 2016-2-25 13:48 | 显示全部楼层
有道理,不过我用了最笨的方法
因为正则实在是刚入门
有没有更简洁的写法?
Pattern = "[A-Z]+\-[A-Z]+\-([A-Z]|[0-9]{2,})+\-[0-9]{2,}\-[0-9]{2,}"
回复

使用道具 举报

发表于 2016-2-25 15:59 | 显示全部楼层    本楼为最佳答案   
QQ截图20160225154019.jpg

Range("a:a").Replace "*-*-*-*-*-", ""
可得到 后半部分。
再替换掉原数据里的后半部分,可得到 前半部分。




我觉得把表达式分为多块,方便检查和修改。
        str1 = "^[A-Z]{2}\-"
        str2 = "[A-Z]{2,3}\-"
        str3 = "[0-9A-Z]{3,4}\-"
        str4 = "\d{2,6}\-"
        str5 = "\d{3,6}\-"
        .Pattern = str1 & str2 & str3 & str4 & str5
只看这16行数据,能不能简化?得看 前半部分的各部分是怎样定义的(即允许怎样,不允许怎样)


回复

使用道具 举报

 楼主| 发表于 2016-2-25 18:45 | 显示全部楼层
爱疯 发表于 2016-2-25 15:59
Range("a:a").Replace "*-*-*-*-*-", ""
可得到 后半部分。
再替换掉原数据里的后半部分,可得到 前半 ...

爱疯,辛苦了,收益匪浅
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 08:18 , Processed in 0.366932 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表