我正在尝试生成一个正则表达式,该表达式可以在VBA中的字符串中识别一个间隔内的数字。有时这个数字在它周围有字符,其他时候没有(来自供应商的不一致符号)。表达式应该识别以下三个示例中的1413在数字范围500-2000 (或者不是在数字范围0-50或51-499)。
示例:
Test 12/2014. Tot.flow:1413 m3或Test 12/2014. Tot.flow:1413m3或Test 12/2014. Tot.flow: 1413这些字符串有一些标识符:
m3之间可能有一个空白。m3不一定总是存在,如果没有,则数字位于字符串的末尾。到目前为止,我尝试做一个查找数字范围的正则表达式是([5-9][0-9][0-9]|[1]\d{3}|2000),但是这也匹配所有三个数字(2001年给出了一个匹配的200)。然而,我知道我错过了几个实现最终目标的概念。我想我的问题如下:
flow:和m3符号的变化我只想检查一下号码是否在号码范围内。这是我的疯狂,所有的帮助都非常感谢!
发布于 2015-10-28 09:11:44
您可以使用以下正则表达式使用regExp.Replace()提取数字:
^.*:\s*(\d+).*$更换部分是$1。
然后,使用通常的数字比较来检查该值是否在预期范围内(例如,If CLng(result) > 499 And If CLng(result) < 2001 Then ...)。
测试宏:
Dim re为RegExp,tgt为字符串,src为字符串。
Set re = New RegExp
With re
.pattern = "^.*:\s*(\d+).*$"
.Global = False
End With
src = "Test 12/2014. Tot.flow: 1413"
tgt = re.Replace(src, "$1")
MsgBox (CLng(tgt) > 499 And CLng(tgt) < 2001)发布于 2015-10-26 11:44:47
你可以尝试:
:\s?([5-9]\d\d|1\d{3}|2000)\s?(m3|\n)而且,在我看来,regex ([5-9][0-9][0-9]|[1]\d{3}|2000)是可以的,它不应该与数字>500和2000<匹配。
https://stackoverflow.com/questions/33344122
复制相似问题