需要从第一个大括号中提取文本

时间:2012-01-31 23:28:42

标签: regex vb.net

我的字符串看起来像这样

{/CSDC} CHOC SHELL DIP COLOR {17}

我需要在第一个swirly括号中提取值。在上面的例子中,它将是

/CSDC

到目前为止,我的代码无效

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

3 个答案:

答案 0 :(得分: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尝试了这个并且它有效。

答案 1 :(得分:2)

我认为这里的主要问题是您在不同语言之间混淆了正则表达式语法。

在Javascript,Perl,Ruby等语言中,您可以使用/regex/表示法创建正则表达式对象。

在.NET中,当您实例化一个Regex对象时,会传递一个正则表达式的字符串,该字符串由引号而不是斜杠分隔。所以它的格式为"regex"

因此,请尝试从字符串中删除前导和尾随/,看看你是怎么做的。

这可能不是整个问题,但它至少是其中的一部分。

答案 2 :(得分:0)

您似乎正在使用捕获组..所以请尝试matchCode(0).Groups(0).Value

此外,从模式的开头删除/ \并删除尾随/