2014-01-07 84 views
1

我使用以下LINQ命令使用不願正則表達式提取的字符串中的托架分隔參數的列表不願正則表達式:分組與LINQ

var result = Regex.Matches("foo[a][b][cccc]bar", @"(\[.+?])") 
    .Cast<Match>() 
    .Select(match => match.ToString()) 
    .ToArray(); 

這將返回以下字符串數組如預期:

- result {string[3]} string[] 
    [0] "[a]" string 
    [1] "[b]" string 
    [2] "[cccc]" string 

有沒有辦法修改正則表達式本身,以便括號不包括在輸出中?我嘗試將表達式的。+部分放在命名組中,但它打破了匹配。很明顯,我可以通過另一個正則表達式運行每個結果來刪除括號,但我想知道是否有更清晰/更好的方法來執行此操作。

回答

2

是的,你可以使用向後看和前瞻斷言:

(?<=\[)(.+?)(?=]) 

的代碼則是:

var result = Regex.Matches("foo[a][b][cccc]bar", @"(?<=\[).+?(?=])") 
    .Cast<Match>() 
    .Select(m => m.ToString()) 
    .ToArray(); 

也請注意,你不需要在分組括號()你的正則表達式,因爲你不想捕獲任何組。

+1

完美,謝謝,我會把它標記爲時間到了!時間讓我去做更多的閱讀:) –