在此字符串中:
"lorem$ dolor @sit ipsum amet$[consectetuer$[5]] @adipiscing[@elit[3]]"
我想匹配以下内容:
lorem$ @sit amet$[consectetur$[5]] @adipiscing[@elit[3]]
我差点把表达下来,但由于某种原因,我无法得到它。这是我的测试程序。这是我到目前为止所做的:
Regex varEx = new Regex(@"(?<Variable>([\w\d]+\$|\@[\w\d]+))(\s*\[(?<Index>.*?)\]|[\W\D\s])");
string test = "lorem$ dolor @sit ipsum amet$[consectetuer$[5]] @adipiscing[@elit[3]]";
foreach (Match m in varEx.Matches(test)) {
Console.WriteLine("{0,10} {1}", "Match:", m.Value);
Console.WriteLine("{0,10} {1}", "Variable:", m.Groups["Variable"].Value);
Console.WriteLine("{0,10} {1}", "Index:", m.Groups["Index"].Value);
Console.WriteLine();
}
程序输出:
Match: lorem$ Variable: lorem$ Index: Match: @sit Variable: @sit Index: Match: amet$[consectetuer$[5] Variable: amet$ Index: consectetuer$[5 Match: @adipiscing[@elit[3] Variable: @adipiscing Index: @elit[3
几乎正确!最后两场比赛只是缺少最后一个括号。我做错了什么?
答案 0 :(得分:1)
您只是设置为捕获其中一个]
您需要向]
命名组添加另一个终止Index
以捕获它
改变这个:
(?<Variable>([\w\d]+\$|\@[\w\d]+))(\s*\[(?<Index>.*?)\]|[\W\D\s])
对此:
(?<Variable>([\w\d]+\$|\@[\w\d]+))(\s*\[(?<Index>.*?\]+)\]|[\W\D\s])
请参阅test