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