ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ggmmlol

[原创] 提取符合特定规则的文本,我用“万能正则表达式”!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-3 19:16 | 显示全部楼层
强大的正则,占个楼学习

TA的精华主题

TA的得分主题

发表于 2019-11-3 19:23 | 显示全部楼层
mgqhome 发表于 2019-11-3 18:04
请教一下,用你的方法并没有得到目标结果,首先REGREPLACE被报错,我改成Replace运行成功, 但没有运行出 ...

报告楼主:
糟啦!糟啦!月亮掉到井里了!


TA的精华主题

TA的得分主题

发表于 2019-11-16 09:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 aoe1981 于 2019-11-16 09:49 编辑
一把小刀闯天下 发表于 2018-8-18 13:38
'参与一下,巨笨的方法

'正则我觉得规则较多不喜欢学,还是流水代码用起来舒服

同70楼,原来我更辛苦。

最近注意到了竞赛题:
[第127期]替换特定规则范围内的字符(进行中……)
http://club.excelhome.net/thread-1506418-1-1.html
(出处: ExcelHome技术论坛)


想必源头是这儿。

一时间有点蠢蠢欲动,跃跃欲试。无奈对于神器“正则表达式”以前似乎通了一窍,如今确定是全都堵了,便难受地只是用寻常的法子做了一下,不想,“眼前有景道不得,崔颢题诗在上头”。

好在我脸皮厚,还是贴了出来。

  1. Private Sub TH()
  2.     Dim i&, n&, S$, cr$(), pd1() As Boolean, pd2() As Boolean
  3.     S = "qwe100eh1eee2e345exxe678ee999eexc"
  4.     n = Len(S)
  5.     ReDim cr$(1 To n), pd1(1 To n) As Boolean, pd2(1 To n) As Boolean
  6.     For i = 1 To n
  7.         cr(i) = Mid(S, i, 1)
  8.     Next i
  9.     For i = 2 To n
  10.         If cr(i - 1) Like "#" And cr(i) = "e" Then pd1(i) = True
  11.         If pd1(i - 1) And cr(i) = "e" Then pd1(i) = True
  12.     Next i
  13.     For i = n - 1 To 1 Step -1
  14.         If cr(i + 1) Like "#" And cr(i) = "e" Then pd2(i) = True
  15.         If pd2(i + 1) And cr(i) = "e" Then pd2(i) = True
  16.     Next i
  17.     For i = 2 To n - 1
  18.         If pd1(i) And pd2(i) Then cr(1) = cr(1) & "2" Else cr(1) = cr(1) & cr(i)
  19.     Next i
  20.     MsgBox S & Chr(10) & cr(1) & cr(n)
  21. End Sub
复制代码



其实,实在的原因是,我从兄台的代码中温习了一招:mid函数的巧用。这一招印象中香川曾讲过,但我不用,束之高阁,早都忘了。今日算是领教了。我又写了一段测试代码:
  1. Public Sub test1()
  2.     Dim S$
  3.     S = "qwe1"
  4.     Debug.Print S, (Mid(S, 3, 1) = "e")
  5.     Debug.Print S, (Mid(S, 3, 1) = "#")
  6.     Mid(S, 3, 1) = "#"
  7.     Debug.Print S, (Mid(S, 3, 1) = "e")
  8.     Debug.Print S, (Mid(S, 3, 1) = "#")
  9. End Sub
复制代码



学如逆水行舟,不进则退、退、退……啊

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-16 11:08 | 显示全部楼层
aoe1981 发表于 2019-11-16 09:45
同70楼,原来我更辛苦。

最近注意到了竞赛题:

哈哈,感谢老师回复

我是从一个链接中注意到了这个竞赛题的,下载后大概看了一下条件是不能用循环去实现的,于是就用goto敲的,因为它属跳转指令。上传后感觉这也太简单了吧,然后又好好看了一下要求,原来是可以实现循环的指令都不能用,当然goto肯定是不能用的啦,估计要用正则,因为楼主本来就是正则达人。我对正则基本上是一窍不通,删不了帖子估计楼主也没有权限删除的,他的回复我也无法看到。反正就挂在那儿不管了。

mid函数我用的比较多,这种用法也是学之于网络的。mid(s,n)我是从这论坛学的,特实用,,,

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-16 12:01 | 显示全部楼层
一把小刀闯天下 发表于 2019-11-16 11:08
哈哈,感谢老师回复

我是从一个链接中注意到了这个竞赛题的,下载后大概看了一下条件是不能用循环去实 ...

老师你这也太坑了吧!
我就是看到你回复了才对那题研究了两三天。因为我记得你说过你没学正则的,所以一直在想这题不用正则不用循环竟然也可以解?!一直在想一直在想……想的脑壳疼。

感谢aoe1981老师顶起这个帖子来,原来出处在这里呀   你们这么搞得算作弊了吧。
耐不住好奇研究了一下,竞赛题跟这题的区别就是,楼主在竞赛题里明确提出来不可以用Evaluate之类的函数。
但是,我刚才又跑回去仔细看了一遍竞赛题,那个题里,似乎暗示可以用自定义函数?(刚看到
这个……似乎与主旨有点不符吧,call一次自定义函数差不多变相的等于一次循环了……

谜底揭开的那一天,希望看到大神真正的不用任何循环体/类循环体(包括自定义函数)解的,我很期待

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-16 12:10 | 显示全部楼层
ggmmlol 发表于 2018-8-17 18:55
第三节:“万能正则表达式”的特例

从本贴5楼的动图演示中可以看出,用万能表达式[\s\S]*?(eXp)|[\s\S]+ ...

为何不写成这样?
[\s\S]*?(a)[\s\S]*?
例:匹配出ghfafdasfasfdadada中的所有a。
对应您的公式为:
[\s\S]*?(eXp)|[\s\S]+
写为:
[\s\S]*?(eXp)[\s\S]*?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-16 17:33 | 显示全部楼层
aoe1981 发表于 2019-11-16 12:10
为何不写成这样?
[\s\S]*?(a)[\s\S]*?
例:匹配出ghfafdasfasfdadada中的所有a。

你的写法是顺序匹配,我的写法是分支选择匹配。顺序匹配是前者匹配成功,后者才能匹配;分支选择匹配,是前者匹配不成功,后者才可以继续匹配。
造成的结果是不同的:
按我的正则表达式,当前者eXp无一次匹配成功时,后者开始匹配,消耗掉所有字符,返回的结果是空字符串;
按你的正则表达式,当前者eXp无一次匹配成功时,后者不会继续匹配,整个源字符不会消耗掉任何一个字符,返回的结果是是源字符串本身。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-16 17:56 | 显示全部楼层
本帖最后由 ggmmlol 于 2019-11-16 17:59 编辑
月关 发表于 2019-11-16 12:01
老师你这也太坑了吧!
我就是看到你回复了才对那题研究了两三天。因为我记得你说过你没学正则的,所以一 ...

你这审题太不认真。
竞赛题中并没有禁止用自定义函数,只是禁止答题者添加的代码中出现任何循环执行代码的手段,包括goto跳转、递归引用。
只要你的自定义函数中没有循环手段,那就不违规。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-16 19:45 | 显示全部楼层
月关 发表于 2019-11-16 12:01
老师你这也太坑了吧!
我就是看到你回复了才对那题研究了两三天。因为我记得你说过你没学正则的,所以一 ...

楼主很自信,这个帖子也是公开的……哈哈

TA的精华主题

TA的得分主题

发表于 2019-11-16 20:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
月关 发表于 2019-11-16 12:01
老师你这也太坑了吧!
我就是看到你回复了才对那题研究了两三天。因为我记得你说过你没学正则的,所以一 ...

正则学过几小时,规则实在太多都看晕了,后来再也没看过,,,

评分

1

查看全部评分

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-25 14:20 , Processed in 0.042242 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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