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