你@"\[\[([^)]*)\]\]"
模式匹配兩個連續[[
,接着以比其他)
零個或多個字符,然後,接着有兩個]]
。這意味着,如果您在[[...]]
內有)
,則不會有匹配。
要處理多字符分隔的子字符串,可以使用2種方法:延遲點匹配或展開的模式。
注意:獲得多個匹配,使用Regex.Matches
正如我在其他的答案中寫道。
1.懶惰點溶液:
var s = "User name [[sales]] and [[anotherthing]]";
var matches = Regex.Matches(s, @"\[{2}(.*?)]{2}", RegexOptions.Singleline)
.Cast<Match>()
.Select(p => p.Groups[1].Value)
.ToList();
見regex demo。 .
需要RegexOptions.Singleline
修飾符才能匹配換行符號。
2.展開正則表達式溶液:
var s = "User name [[sales]] and [[anotherthing]]";
var matches = Regex.Matches(s, @"\[{2}([^]]*(?:](?!])[^]]*)*)]{2}")
.Cast<Match>()
.Select(p => p.Groups[1].Value)
.ToList();
有了這一個,RegexOptions.Singleline
不是必需的,並且它是更加有效和更快。
見regex demo
使用'Regex.Matches'。 –
我投票結束這個問題作爲離題,因爲這可以解決檢查intellisense建議或只是檢查什麼方法'正則表達式'對象支持MSDN。 –
我更新了它,以更準確地解決我的問題。 Wiktor的回答原來的問題,但事實證明,沒有爲我的實際情況這麼好。 – naspinski