使用VBScript或VBA我試圖編寫一個REGEX查詢來捕獲兩個特定字符串值之間的所有單詞。REGEX捕獲兩個字符串之間的所有單詞
條件: 多行,全球
我試圖捕捉之間的所有單詞 '日誌:' 和 '工作站#' 字符串
測試字符串:
show access-log log brief
Logs:
main
streaming
ssl
cifs
mapi
im
p2p
WORKSTATION#(config)show
預期結果:
main, streaming, ssl, cifs, mapi, im, p2p
我目前的非工作代碼:
Function GetLogList()
Dim strInput, objRegEx, oRegResults
Dim X, Y, Z
strInput = "show access-log log brief" & vbCrLf & _
"Logs:" & vbCrLf & _
"main" & vbCrLf & _
"streaming" & vbCrLf & _
"ssl" & vbCrLf & _
"cifs" & vbCrLf & _
"mapi" & vbCrLf & _
"im" & vbCrLf & _
"p2p" & vbCrLf & _
"WORKSTATION#(config)show"
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.MultiLine = True
objRegEx.Global = True
'Need Help with pattern
objRegEx.Pattern = ":\s*(\S*)\s*?WORKSTATION#"
Set oRegResults = objRegEx.Execute(strInput)
For X = 0 To oRegResults.Count - 1
Debug.Print oRegResults(X).Value
For Y = 0 To oRegResults(X).SubMatches.Count - 1
If oRegResults(X).SubMatches(Y) <> vbNullString Then
Debug.Print oRegResults(X).SubMatches(Y)
End If
Next
Next
End Function
我非常感謝任何幫助我的REGEX模式捕獲:和WORKSTATION#之間的所有單詞。謝謝!
編輯:
感謝您的建議。我有一圈,沒有想到這一點。我曾以爲我的實際字符串會有額外的空白,但事實證明,下面的工作很好地捕捉整個字符串並通過vbCrLf分割。感謝所有幫助過我的人。
最終的過程:
Function GetLogListArray(strInput)
Dim objRegEx, oRegResults
GetLogListArray = vbNullString
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.MultiLine = True
objRegEx.Global = True
objRegEx.Pattern = "Logs\:\s*([\S\s]*?)\s*?\S*?#"
Set oRegResults = objRegEx.Execute(strInput)
If oRegResults.Count = 0 Then Exit Function
If oRegResults(0).Submatches.Count = 0 Then Exit Function
GetLogListArray = Split(oRegResults(0).Submatches(0), vbCrLf)
End Function
匹配':: WORKSTATION#::: WORKSTATION#::: WORKSTATION#::: WORKSTATION#' – sln 2014-12-03 17:33:35
@BHart這是不正確的.OP想從'Logs'開始。在一個很長的文件中,列表,它需要另一個搜索算法來搜索陣列 – vks 2014-12-04 05:50:17
@vks這是他的要求:「我非常感謝我的REGEX模式幫助捕獲:和WORKSTATION#之間的所有單詞。「 – 2014-12-04 21:06:02