我试图生成一个正则表达式,可以识别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
的注释变化?我 仅对检查该号码是否在数字范围内感兴趣。这让我疯狂,所有的帮助都非常感谢!
答案 0 :(得分:3)
您可以使用以下正则表达式使用regExp.Replace()
提取数字:
^.*:\s*(\d+).*$
替换部分为$1
。
然后,使用通常的数字比较来检查该值是否在预期范围内(例如If CLng(result) > 499 And If CLng(result) < 2001 Then ...
)。
测试宏:
Dim re As RegExp,tgt As String,src As String
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)
答案 1 :(得分:1)
您可以尝试:
:\s?([5-9]\d\d|1\d{3}|2000)\s?(m3|\n)
另外,我认为你的正则表达式([5-9][0-9][0-9]|[1]\d{3}|2000)
很好,它不应该匹配数字&gt; 500和2000&lt;。