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的得分主题

 楼主| 发表于 2018-8-18 12:23 | 显示全部楼层
duquancai 发表于 2018-8-18 12:04
18楼的 描述简练且明确,也有模拟结果!没啥毛病。
我也很期待“万能的正则”!
针对18楼的 实例 我扩展 ...

我已经在26楼中 用红字 明确地标明了 fsq119在18楼的描述 和 他在22楼的补充描述 的差异,你又何必一再秀你个人的理解呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 12:26 | 显示全部楼层
如果18楼的提问,不带上所谓的期望结果,那就是如下所示:

提问:
对字串"qwe100eh1eee2e345exxe678ee999eexc",要求数字之间所夹的单个或连续的“e”,用数字2替换,请问结果是什么?

TA的精华主题

TA的得分主题

发表于 2018-8-18 12:29 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ggmmlol 发表于 2018-8-18 12:23
我已经在26楼中 用红字 明确地标明了 fsq119在18楼的描述 和 他在22楼的补充描述 的差异,你又何必一再秀 ...

好的,我闭嘴,不再参与了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 12:40 | 显示全部楼层
本帖最后由 ggmmlol 于 2018-8-18 13:00 编辑
duquancai 发表于 2018-8-18 12:04
18楼的 描述简练且明确,也有模拟结果!没啥毛病。
我也很期待“万能的正则”!
针对18楼的 实例 我扩展 ...
刚才回复时跨页了,提问的楼层应该是32楼,所以修改一下。

请试着对32楼的提问给出你的答案。

也请有兴趣参与讨论的朋友,帖出个人对31楼问题的答案。


我自己先带头给出我的答案:

  1. '说明:以下代码中用到的REGREPLACE函数,如本主题26楼所示,因此不再重复贴出。
  2. Sub test() '答32楼提问
  3.     '字串"qwe100eh1eee2e345exxe678ee999eexc",要求数字之间所夹的单个或连续的“e”,用数字2替换
  4.     s = "qwe100eh1eee2e345exxe678ee999eexc"
  5.     MsgBox REGREPLACE(s, "(\d)e+(?=\d)", "$12")
  6. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 12:53 | 显示全部楼层
本帖最后由 ggmmlol 于 2018-8-18 13:15 编辑
duquancai 发表于 2018-8-18 12:29
好的,我闭嘴,不再参与了。

本贴欢迎参与讨论,对同一个问题,也可以说出自己的答案,以做比较、改进。

但我相信,任何人参与讨论时,都希望对方是在讨论同一个问题,而不是自己把问题本身做了一番“修改”之后再来讨论,然后纠缠不休。

可以说,紧接在fsq119于18楼提问之后,我就指出了 他的提问与他的“期望结果”两者是自相矛盾的。而且,我也同时 从基本的定义上给出了正则表达式(\d)e+(?=\d)

这些,你都视而不见,我说你是纠缠不休,并没有委屈了你。所以,如果你诚意参与讨论,那请先回答一下32楼的提问吧。

因为,只有不带结果导向(或者说不预设结果)的提问, 才是参与讨论者 能够 各抒己见的基础,只有这样,也才是显示出 提问的人、以及其他参与者之间公平讨论的诚意。

当然,如果你仍然自己闭嘴,我也同样不会反对。

TA的精华主题

TA的得分主题

发表于 2018-8-18 13:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2018-8-18 12:04
18楼的 描述简练且明确,也有模拟结果!没啥毛病。
我也很期待“万能的正则”!
针对18楼的 实例 我扩展 ...

借用楼主的Evaluate方法:
a = Evaluate(Chr(34) & REGREPLACE(s, "(\d)((e)+)(?=\d)", "$1"" & len(""$2"") & ""$3") & Chr(34))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 13:35 | 显示全部楼层
讲一个冷笑话:
小明:老姐,你知道什么时候1加上1 会等于3吗?
老姐:啊?1加上1 ,怎么可能会等于3?!
小明:哈哈,这你都不懂吧!答案是:“在你算错的时候!”
老姐:……好你个臭小子,原来你是在考我“脑筋急转弯”哪!

TA的精华主题

TA的得分主题

发表于 2018-8-18 13:38 | 显示全部楼层
'参与一下,巨笨的方法

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

'字串"qwe100eh1eee2e345exxe678ee999eexc",要求数字之间所夹的单个或连续的“e”,用数字2替换

Option Explicit

Sub test()
  Dim s, i, j, k
  s = "qwe100eh1eee2e345exxe678ee999eexc"
  Debug.Print s
  s = s & "?"
  For i = 1 To Len(s) - 1
    If IsNumeric(Mid(s, i, 1)) And Mid(s, i + 1, 1) = "e" Then
      For j = i + 1 To Len(s) - 1
        If IsNumeric(Mid(s, j, 1)) Then
          For k = i + 1 To j - 1: Mid(s, k, 1) = "2": Next
          i = j - 1: Exit For
        End If
        If Mid(s, j, 1) <> "e" Then i = j - 1: Exit For
      Next
    End If
  Next
  Debug.Print Left(s, Len(s) - 1)
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-8-18 13:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Evaluate方法,楼主用的好,学习了。
关于我示例的描述,你也不必再纠结。
扰乱了楼主的发帖,实在是不好意思了!静待后续好文。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 14:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ggmmlol 于 2018-8-18 15:27 编辑
fsq119 发表于 2018-8-18 13:50
Evaluate方法,楼主用的好,学习了。
关于我示例的描述,你也不必再纠结。
扰乱了楼主的发帖,实在是不好 ...

Evaluate方法,仍有局限,一是 只能用于VBA代码或名称定义,而不能直接用于单元格中,另一点是其参数长度不能超过255个字符的限制。

如果想在单元格中构造公式,使得用正则表达式对象的Replace方法捕获的分组中的每一个值都可以被二次加工,那么,可以用一个“=”号来代替宏表函数Evaluate,而且单元格 公式中允许的字符总数要宽泛得多。

具体的例子,可以参考以下求助贴中11楼,我所做的回复和演示:

如何用公式将单元格中某一组数字批量加3?
http://club.excelhome.net/thread-1419039-2-1.html


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

本版积分规则

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

GMT+8, 2024-6-3 02:17 , Processed in 0.047438 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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