单引号之间的RegEx数字

时间:2015-03-11 17:36:33

标签: regex vbscript

我有一个像"f_details('277095');">这样的字符串。我只需要获得277095部分。我一直在尝试strPattern = "'[0-9]'+"的变体,但这要么找不到,要么找错了。

尽管我面前有一张备忘单,但我不懂正则表达式。花了一个小时尝试不同的东西。这个正则表达式会是什么样的?

以下是我用来抓取此网站并获取数据的代码:

Set objWshShell = Wscript.CreateObject("Wscript.Shell")
Set IE = CreateObject("internetexplorer.application")
Set fso = CreateObject("Scripting.FileSystemObject")

on error resume next
For i=1 To 77 '77 Counties

If i=77 Then Exit For

IE.Visible = True
IE.Navigate "https://lic.ok.gov/PublicPortal/OREC/FindAssociateEntity.jsp"
Do Until IE.ReadyState = 4: WScript.sleep 15: Loop

Do Until IE.Document.ReadyState = "complete": WScript.sleep 10: Loop
IE.Document.getElementsByTagName("select")("AddrCountyCode").Value = i

Do Until IE.Document.ReadyState = "complete": WScript.sleep 10: Loop
For Each btn In IE.Document.getElementsByTagName("input")
If btn.name = "btnSearch" Then btn.Click()
NEXT

strPattern = "'(\d+)'"

strTestString = ie.document.body.innerhtml

arrAllMatches = fGetMatches(strPattern, strTestString)

If UBound(arrAllMatches) <> 0 Then 

filename = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\License.txt"

set fso = createobject("scripting.filesystemobject")
set ts = fso.opentextfile(filename,8,true) 
ts.write Join(arrAllMatches, vbCrlf)
ts.close 

Else

WScript.Echo "-- None Found --"

End if

next
Wscript.echo "DONE!"

'=====================================================================
Function fGetMatches(sPattern, sStr)
Dim regEx, retVal, sMatch, colMatches, temp
Set regEx = New RegExp     ' Create a regular expression.
regEx.Pattern = sPattern   ' Set pattern.
regEx.IgnoreCase = True   ' Set case insensitivity.
regEx.Global = True        ' Set global applicability.

Set colMatches = regEx.Execute(sStr)   ' Execute search.

If colMatches.Count = 0 Then
    temp = Array("")
Else
    '# Convert Collection to Array
    For Each sMatch In colMatches
        temp = temp & sMatch & "¶"
    Next
    temp = Left(temp, Len(temp) - 1)
    temp = Split(temp, "¶")
End If

fGetMatches = temp
End Function

3 个答案:

答案 0 :(得分:3)

'\d+'

只需将量词添加到\d而不是',以便\d重复。

如果您只想获得(?<=')\d+(?=')

,请尝试277095

参见演示。

https://regex101.com/r/iS6jF6/6

Dim strRegex as String = "'\d+'"
Dim myRegex As New Regex(strRegex, RegexOptions.Multiline)
Dim strTargetString As String = "f_details('277095');"

For Each myMatch As Match In myRegex.Matches(strTargetString)
     If myMatch.Success Then
     ' Add your code here
  End If
Next

答案 1 :(得分:1)

VBScript的正则表达式实现受到限制,但是如果你遵循一般规则&#34;保持简单&#34;,即使在这里你也可以轻松地剪切一系列数字:

>> Set r = New RegExp
>> r.Pattern = "\d+"
>> s = "f_details('277095');"
>> WScript.Echo r.Execute(s)(0).Value
>>
277095

答案 2 :(得分:0)

除了Vks回答之外,您还可以使用捕获组来捕获所需的内容。

你可以使用这样的正则表达式:

'(\d+)'

<强> Working demo

您可以看到以蓝色突出显示的匹配项以绿色显示捕获的内容

enter image description here

匹配信息

MATCH 1
1.  [11-17] `277095`