2014-02-06 53 views
0

這是我偶然發現的, 。VBScript - RegEx - 修改ObjMatch - Pattern =「( d {2})( d {2})( d {2})」

Set objRegEx = CreateObject("VBScript.RegExp") 
Dim re, targetString, colMatch, objMatch 
Set re = New RegExp 
With re 
.Pattern = "(\d{2}) (\d{2}) (\d{2}) 0500Z" 
.Global = True 
.IgnoreCase = True 
End With 
targetString = "02 04 14 0500Z Joe is eating a sandwich" 

Set colMatch = re.Execute(targetString) 
For each objMatch in colMatch 
WScript.echo objMatch 

date1 = objRegEx.Replace(objMatch, "(\d{2})(\d{2})(\d{2})") 
Wscript.Echo date1 

問題:我需要找到它顯示了這樣的「02 04 14 0500Z」的日期,然後將其分配給其形式爲「020414」的變量。

當我嘗試替換Obj匹配並重新格式化日期時,它不起作用,而是在括號中顯示確切的文本。

我引用: http://www.mikesdotnetting.com/Article/24/Regular-Expressions-and-VBScript http://wiki.mcneel.com/developer/scriptsamples/regexpobject

+0

你的意思是顯示'「(\ d {2})(\ d {2})(\ d {2})」'?我有點不清楚你的意思。 –

+0

@ I'L'I是的,確切地說。它完全按原樣顯示引號中的任何內容。 – Adrian

回答

1

指由捕獲組捕獲的內容,在替換字符串使用$n(其中n是一個數字):

date1 = re.Replace(objMatch, "$1$2$3") 

要識別的數一個捕獲組,計算屬於捕獲組的開放括號(的數目直到您想要參照的捕獲組:

(\d{2}) (\d{2}) (\d{2}) 0500Z 
^  ^ ^
1  2  3 

一個更復雜的例子:

((a(?:k)*)(b(c)(?:d)*)) 
^^  ^^ 
12  3 4 

(?:pattern)是一個非捕獲基團,因此它不計數。

+0

我其實是那麼做的,它不起作用,這是什麼促成了這個問題。 date1 = objRegEx.Replace(objMatch,「$ 1 $ 2 $ 3」) Wscript.Echo date1'給出:$ 1 $ 2 $ 302 04 14 0500Z – Adrian

+0

@Adrian:如何're.Replace'而不是'objRegEx'? – nhahtdh

+0

工作。嗯,我不是100%爲什麼ObjRegEx沒有。謝謝。 – Adrian