2014-12-03 50 views
1

使用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 

回答

0

爲什麼不抓住的話整個列表的第一個然後解析呢?

objRegEx.Pattern = ":\s*([\S\s]*)\s?WORKSTATION#" 

然後,你oRegResults必須包含您可以撥打分裂(與分隔符是換行符)將文字陣列中的所有單詞1串。

+0

匹配':: WORKSTATION#::: WORKSTATION#::: WORKSTATION#::: WORKSTATION#' – sln 2014-12-03 17:33:35

+0

@BHart這是不正確的.OP想從'Logs'開始。在一個很長的文件中,列表,它需要另一個搜索算法來搜索陣列 – vks 2014-12-04 05:50:17

+0

@vks這是他的要求:「我非常感謝我的REGEX模式幫助捕獲:和WORKSTATION#之間的所有單詞。「 – 2014-12-04 21:06:02

3

如果你想捕捉獨立每個單詞,其過程分爲兩個步驟。

獲取

多行之間的全文,全球

而(

^Logs:([\S\s]*?)^WORKSTATION# 


{

split on whitespace, the string returned in capture group 1. 

}

相關問題