ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-23 08:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xd3210 于 2015-10-23 15:00 编辑

求解正则表达式
字符:s="(88+88)+sin(45.3)+(22.33)+2(33.99)+(55+77)"
要求:只匹配小括号中的数字及括号("(22.33)"、"(33.99)"),但不匹配"sin(45.3)"中的"(45.3)"
请各位高手赐教!

在袁老师及各位老师的耐心帮助和指点下,圆满解决,在此一并谢过!
Sub 袁()
    Dim reg, s
    s="(88+88)+sin(45.3)+(22.33)+2(33.99)+(55+77)"
    Set reg = CreateObject("vbscript.regexp")
    s = StrReverse(s)
    reg.Global = True
    reg.Pattern = “\)\d*\.?\d*\((?!nis)"
    s = reg.Replace(s, "")
    MsgBox StrReverse(s)
End Sub


TA的精华主题

TA的得分主题

发表于 2015-10-23 09:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-10-23 09:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常有难度。

TA的精华主题

TA的得分主题

发表于 2015-10-23 09:48 | 显示全部楼层

高手也说有难度,您太谦虚了。
请教:小数(double数字)的正则如何写?各种可能的情况:小数点前没有前导0;只有整数部分;大于0小于1。。。
另:外加考虑正负的情况下如何写?

TA的精华主题

TA的得分主题

发表于 2015-10-23 09:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-10-23 09:53 | 显示全部楼层
zhouzhongchi 发表于 2015-10-23 09:48
高手也说有难度,您太谦虚了。
请教:小数(double数字)的正则如何写?各种可能的情况:小数点前没有前 ...

这些都不难,关键是他括号前,括号中,括号后都有各种情况。这正则即使能写出来,也是很长一串。或者是3到5个正则。

TA的精华主题

TA的得分主题

发表于 2015-10-23 10:07 | 显示全部楼层
t13564865256 发表于 2015-10-23 09:53
这些都不难,关键是他括号前,括号中,括号后都有各种情况。这正则即使能写出来,也是很长一串。或者是3 ...

对你来说不难。虚心求教,还请帮助。帮忙写个关于小数的正则,在下不会。谢谢!

TA的精华主题

TA的得分主题

发表于 2015-10-23 10:42 | 显示全部楼层
zhouzhongchi 发表于 2015-10-23 10:07
对你来说不难。虚心求教,还请帮助。帮忙写个关于小数的正则,在下不会。谢谢!

"\(\d+\.\d+\)"
三个可以提取,就是前面是字母的排除不了

TA的精华主题

TA的得分主题

发表于 2015-10-23 10:54 | 显示全部楼层
Sub ys()
    Dim Reg As Object
    Set Reg = CreateObject("vbscript.regexp")
    k = "(88+88)+sin(45.3)+(22.33)+2(33.99)+(55+77)"
        Reg.Global = 1
       Reg.Pattern = "\(\d+\.\d+\)"
     Set mc = Reg.Execute(k)
    For i = 0 To mc.Count - 1
     s = s & mc(i).Value & Chr(10)
        Next
        MsgBox s
End Sub

TA的精华主题

TA的得分主题

发表于 2015-10-23 10:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 t13564865256 于 2015-10-23 10:57 编辑
zhouzhongchi 发表于 2015-10-23 10:07
对你来说不难。虚心求教,还请帮助。帮忙写个关于小数的正则,在下不会。谢谢!

Sub bbb()
    Dim s
    s = "sin(45.3)+(22.33)+(33.99)"
    With CreateObject("VBScript.RegExp")
        .Pattern = "[^0-9.+]"
        .Global = True
        s = .Replace(s, "")
    End With
    MsgBox s
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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