2010-04-30 85 views
2

我想只提取括號內的文本 - 不是括號內!目前正則表達式提取兩個delimeters之間的字符串沒有也返回delimeters?

我的代碼如下所示:

var source = "Harley, J. Jesse Dead Game (2009) [Guard]" 

// Extract role with regex 

m = Regex.Match(source, @"\[(.*)\]"); 
var role = m.Groups[0].Value; 
// role is now "[Guard]" 

role = role.Substring(1, role.Length-2); 
// role is now "Guard" 

你能幫我簡化這只是一個單一的正則表達式,而不是正則表達式,那麼子?

回答

5

您使用不同的組號碼。每當你用()包裝一些東西時,它就會創建一個新的組。零組是整個找到的表達式。 group1是第一組(),group2是第二組等等。由於您使用的是組0,因此它將返回與表達式匹配的整個字符串

嘗試將組[x]更改爲1並查看它給出的結果您。

+0

非常感謝你:) – 2010-04-30 06:16:03

0

您可以使用零寬度預測先行(?=)和回顧後(?<=)斷言:

m = Regex.Match(source, @"(?<=\[).*(?=\])"); 
var role = m.Value; 
  • 零寬度正預測先行斷言:相匹配的後綴,但是從捕獲排除
  • 零帶寬正向反向斷言:匹配前綴但將其從捕獲中排除

請參閱Grouping Constructs MS DN的詳細信息。

相關問題