VBScript +正则表达式:缓存两位和三位数

时间:2016-10-27 09:21:13

标签: regex vbscript

在Windows 7中,除了数字之外,我使用了超过100个具有相同名称的服务 在名称中,我想过滤SVC背后的数字:模式的问题是他没有过滤3位数。所以我的最后一个数字总是99.如何更改模式,所以我可以过滤1,2和3位数?

c:\ program.exe / SVC:1 / STN:9501

c:\ program.exe / SVC:2 / STN:9502 等

c:\ program.exe / SVC:99 / STN:9599

c:\ program.exe / SVC:100 / STN:9600

c:\ program.exe / SVC:101 / STN:9601

    For Each objService in colListOfServices
      Set objRegEx = New RegExp 
      objRegEx.IgnoreCase = False
      objRegEx.Pattern = "/SVC\:(.+)?/STN" ' Set pattern.
    If Not IsNull(objService.PathName) Then
      If objRegEx.Test(objService.PathName) Then
        intID = objRegEx.Execute(objService.PathName)(0).SubMatches(0) 
      Else
        intID = 0
      End If
      Else
        intID = 0
      End If

  If intID > intMaxID Then
    intMaxID = intID
  End If

Next

wscript.echo "MaxID: " & intMaxId

2 个答案:

答案 0 :(得分:0)

更改此行:

objRegEx.Pattern = "/SVC\:(.+)?/STN" ' Set pattern.

为:

objRegEx.Pattern = "/SVC:(\d{2,3})\s*/STN" ' Set pattern.

在问题的最后一次更改后,正则表达式是:

objRegEx.Pattern = "/SVC:(\d{1,3})\s*/STN" ' Set pattern.

或者,如果数字的位数是不确定的(即从0到无穷大):

objRegEx.Pattern = "/SVC:(\d+)\s*/STN" ' Set pattern.

答案 1 :(得分:0)

我认为没有必要使用RegEx:

Dim d As Double, a() As String

a = Split("Text BLA BLA /SVC:98 /STN", ":")

d = Val(a(UBound(a)))                   ' Example "98 /STN" to 98.0
相关问题