我的字符串看起来像这样
{/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
答案 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
此外,从模式的开头删除/ \并删除尾随/