2011-08-01 30 views
3

我:如何從vb.net中的正則表達式匹配獲取字符串?

Dim Text = "some text here ###MONTH-3### some text here ###MONTH-2### some text here" 
Dim regex = New System.Text.RegularExpressions.Regex("###MONTH[+-][0-9]###") 
For Each match In regex.Matches(Text) 
    // What to write here ? 
    // So, that ###MONTH-i### gets replaced with getmonth(i) 
    // Therefore, final Text will be : 
    // Text = "some text here" + getmonth(-3) + "some text here" + getmonth(-2) + "some text here" 
Next match 

我想我已經適當解釋我的問題..

所以,你可以請幫助?

+0

是的,你真的應該開始使用Option Explicit ... – xx77aBs

+3

他可以使用[Option Infer](http://msdn.microsoft.com/en-us/library/bb384665.aspx)。編譯器無法爲你編寫代碼。 – R0MANARMY

+0

的確,我想這對文字和非常明顯的表達式來說是可以接受的。 – Jodrell

回答

2

這是你想要的,我想。

Dim text As String = "some text here ###MONTH-3### some text here ###MONTH-2### ..." 
Dim regex = New System.Text.RegularExpressions.Regex("###MONTH[+-][0-9]###") 

return regex.replace(text, AddressOf GetMonthFromMatch) 

Function GetMonthFromMatch(ByVal m As Match) As String 
    ' Get the matched string. 
    Dim matchText As String = m.ToString() 

    Dim offset As Int = Integer.Parse(matchText.Right(2)) 
    Return getmonth(offset) 
End Function 

它使用GetMonthFromMatch委託來處理每一場比賽,並依次調用getmonth功能。 RegEx.Replace函數將使用委託來替換每個匹配。

1

首先稍微修改您正則表達式:

System.Text.RegularExpressions.Regex("###MONTH([+-][0-9])###") 

正如你所看到的,我只是把數量和+/-在括號中。這樣我們可以稍後檢索它們。

所以現在你可以訪問你只需要數據(例如-3)白衣這行代碼:

match.Groups(1).Value 

編輯:

甚至還有一個更簡單的方法:)只要使用替換功能。

在你的榜樣,將是這樣的:

Dim regex = New System.Text.RegularExpressions.Regex("###MONTH([+-][0-9])###") 
regex.Replace(Text, "getmonth($1)") 

$ 1的正則表達式第一括號引用,所以代替$ 1會有什麼都一個月它實際上是。

+1

這會將文本文本「getmonth(-3)」插入到輸入字符串中。他想運行'getmonth'函數並插入* result *。 –

+0

亞..賈斯廷是正確的..我想運行函數'getmonth(-3)'並替換值。 –

+0

哦......我的不好;) – xx77aBs

相關問題