[RegEx]求一个正则,-10℃~15℃读出两个数字

str:="-10℃~15℃"
RegExMatch(str,"^([-]?[0-9]*)[^\d]~([-]?[0-9]*)[^\d]$",m)
MsgBox %m1%
MsgBox %m2%


问题1:上述代码只能匹配带负号的,若带正号怎么办?

简单  将上面正则表达式中的 - 改为 -|\+  其中的|是或的意思,即负号或正号,  另要注意+需要转义符号\

RegExMatch(str,"^([-|\+]?[0-9]*)[^\d]~([-|\+]?[0-9]*)[^\d]$",m) 




问题2:上面的只能匹配整数,如果匹配小数怎么办?

RegExMatch(str,"^([-|\+]?[\d]+[\.]?[\d]*)[^\d]~([-|\+]?[\d]+[\.]?[\d]*)[^\d]$",m)


 
;~ 用带范围好阅读一些,下面是不用范围的更简洁。
str:="-13.2℃~+15.5℃"
RegExMatch(str,"^((-|\+)?\d+(\.\d+|))[^\d]~((-|\+)?\d+(\.\d+|))[^\d]$",m)
MsgBox % m1
MsgBox % m4 ;注意括号分组关系(1(2  ) (3  )  ) ~ (4(5  )(6  )  )  可以用?:来取消分组
细说如下:
(-|\+)?  0或1个正负号的意思吧
\d+      1或n个各数字的意思吧
(\.\d+|) 一个点加1个或多个数字,或为空

[^\d]    一个非数字字符,这里可以写成℃



str:="-13.2℃~15.5℃ -12℃ 12℃ +0℃ 34 15" 
loop
    if !(spos:=RegExMatch(str,"O)((?:-|\+)?\d+(?:\.\d+)?)(?=℃)",m,spos?spos:!spos)+StrLen(m[1]),s := s m[1] "`n")
        break
MsgBox % s
return


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值