2011-02-09 112 views
6

我一直在嘗試使用VB正則表達式對象來做下面的事情,但找不到一個簡單的方法來做到這一點。有沒有人可以提供一些建議?正則表達式 - 如何在比賽中找到比賽?

例如,我有一個字符串「12 < 56> 89」,我想在「<>」中得到字符串,在這種情況下應該是「56」。我目前正在做的是試圖找到表達式「< \ d +>」,這將返回< 56>。然後我嘗試從第一個匹配的結果中找到表達式「\ d +」,它將返回56.

我不喜歡這種方式,因爲它需要調用兩次函數。我想知道是否可以使用一個正則表達式來獲取「<>」中的字符串?謝謝!

謝謝你,艾倫

回答

8

使用表達式 「<(\ d +)>」

然後,您可以訪問所有的比賽作爲一個集合。如果您設置RegEx.Global = True,則您的正則表達式可以匹配多次。第一個匹配在var(0)中找到,第二個在var(1)中找到。子匹配組在VAR被發現(0).SubMatches(0)等。如果你只是做一次,就可以一條線是:

Dim RegEx : Set RegEx = New RegExp 
RegEx.Pattern = "<(\d+)>" 
Dim strTemp : strTemp = "12<56>89" 
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0) 

測試出你的正則表達式在這裏: http://www.regular-expressions.info/vbscriptexample.html

+0

謝謝傑夫。 如何返回組變量$ 1? 我真的想要做的是找到兩個字符串之間的字符串,但不包括結果中的兩個邊界字符串。 我畫了一個查找表達式「(?<=<)\d+(?=>)」,但它似乎沒有工作。 還有更多建議嗎? 謝謝, 艾倫 – Allen 2011-02-10 00:49:29

+0

啊,對不起。我的答案是perl。更新爲vbscript – 2011-02-10 06:49:20

3

使用表達式<(\ d +)>。執行正則表達式使用

Set matches = expr.Execute(text) 
If matches.Count > 0 Then 
    result = matches(0).Submatches(0) 
End If 

Submatches集合包含對應於表達式中括號分組的字符串。