2012-01-31 45 views
1

中提取文本我有一個看起來像這樣需要從第一大括號

{/CSDC} CHOC SHELL DIP COLOR {17} 

我需要提取第一旋渦狀的括號內的值的字符串。在上面的例子中這將是

/CSDC 

到目前爲止,我有這個代碼不工作

Dim matchCode = Regex.Matches(txtItems.Text, "/\{(.+?)\}/") 
Dim itemCode As String 
If matchCode.Count > 0 Then 
    itemCode = matchCode(0).Value 
End If 
+1

請不要在「Vb.net Regex」等標題前加前綴。這就是標籤的用途。另外,儘管您可能正在ASP.NET應用程序中運行此代碼,但問題本身與ASP.NET無關,所以我刪除了該代碼。 – 2012-01-31 23:31:14

回答

2

我認爲這裏的主要問題是你在不同語言之間混淆了你的正則表達式語法。

在Javascript,Perl,Ruby等語言中,您可以使用/regex/表示法創建正則表達式對象。

在.NET中,當您實例化一個Regex對象時,會將其傳遞給正則表達式的字符串,該正則表達式由引號分隔,而不是斜槓。所以它的形式是"regex"

因此,請嘗試從您的字符串中刪除前導和尾隨/,看看你如何去。

這可能不是全部問題,但它至少是其中的一部分。

+1

非常感謝。從開始和結束刪除「/」幫助。 – boruchsiper 2012-01-31 23:44:54

+0

我應該提到,這段代碼可以幫助我找到帶有大括號的代碼。這可以輕鬆地進行替換。 – boruchsiper 2012-01-31 23:47:12

0

看來您使用的是捕獲組..所以儘量匹配碼(0).Groups( 0).value的

此外,刪除模式的/ \從一開始就和刪除尾隨/

2

您是否獲得了整個字符串,而不只是第一個值?正則表達式默認情況下是貪婪的,所以.Net試圖抓取最大的匹配字符串。

試試這個:

Dim matchCode = Regex.Matches(txtItems.Text, "\{[^}]*\}") 
Dim itemCode As String 
If matchCode.Count > 0 Then 
    itemCode = matchCode(0).Groups(0).Value 
End If 

編輯:我在Linqpad想這和它的工作。

+0

這不起作用 – boruchsiper 2012-01-31 23:39:21

+0

就像@GregL說的,你混淆了語法。我沒有注意到,在我的第一個答案太:) – 2012-01-31 23:45:25

+0

+1在LinqPad驗證它,我沒有想到這一點。 – GregL 2012-02-01 11:07:03