ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 求解正则表达式

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-23 13:04 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
紫川文秀 发表于 2015-10-23 12:58

不在电脑边没有验证,此正则只能匹配“n(4t.3)”吧?

TA的精华主题

TA的得分主题

发表于 2015-10-23 13:10 | 显示全部楼层
xd3210 发表于 2015-10-23 13:04
不在电脑边没有验证,此正则只能匹配“n(4t.3)”吧?

你试试就知道了

TA的精华主题

TA的得分主题

发表于 2015-10-23 13:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-10-23 13:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xd3210 发表于 2015-10-23 13:04
不在电脑边没有验证,此正则只能匹配“n(4t.3)”吧?

不对,"[^n]\(\d+\.?\d+\)",能匹配+(22.33)和2(33.99),再把+和2咔嚓掉就行了,但是也属于2次加工

TA的精华主题

TA的得分主题

发表于 2015-10-23 13:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
(1+(2))这个如何处理

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-23 13:42 来自手机 | 显示全部楼层
袁振涛 发表于 2015-10-23 13:40
(1+(2))这个如何处理

括号内纯数字的一同消除

TA的精华主题

TA的得分主题

发表于 2015-10-23 13:55 | 显示全部楼层
StrReverse这个函数这几天刚学到。

  1. Dim reg, s
  2.     s = "(88+88)+79+(32-18)+sin(45.3)+(22/33)+2(33.99)+(55+77)+(1+(2+(1)))"
  3. Set reg = CreateObject("vbscript.regexp")
  4.     s = StrReverse(s)
  5.     reg.Global = True

  6.     reg.Pattern = "\)\d+(?:\.\d+)?\((?![a-z]+)(\d+|)[\+\-\*/]?"

  7.     While reg.test(s)
  8.           s = reg.Replace(s, "")
  9.     Wend

  10.     MsgBox StrReverse(s)
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-23 13:56 | 显示全部楼层
颠倒后,用否定环视匹配成功!
颠倒正则.PNG

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-23 14:21 | 显示全部楼层

谢谢美女老师的帮助!虽然不能一次达到要求,变通一下还能达到目的。
Sub th()
     Dim s$, m, matches
     s = "(88+88)+sin(45.3)+(22.33)+2(33.99)+(55+77)"
     With CreateObject("VBScript.RegExp")
         .Pattern = "([^n])\(\d+\.?\d+\)"
         .Global = True
         s = .Replace(s, "$1")
     End With
     Debug.Print s
     Debug.Print Evaluate(s)
     
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-23 14:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xd3210 于 2015-10-23 15:19 编辑
袁振涛 发表于 2015-10-23 13:55
StrReverse这个函数这几天刚学到。


感谢袁老师帮助!在您的思路启发下,颠倒后配合否定环视圆满解决!

Dim reg, s
    s = "(88+88)+79+(32-18)+sin(45.3)+(22/33)+2(33.99)+(55+77)+(1+(2+(1)))"
Set reg = CreateObject("vbscript.regexp")
    s = StrReverse(s)
    reg.Global = True
    reg.Pattern = "\)\d*\.?\d*\((?!nis)"
     s = reg.Replace(s, "")
      MsgBox StrReverse(s)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 20:12 , Processed in 0.039171 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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