2016-07-22 67 views
1

我看为什么不能获取括号之间的东西?

var r = new Regex(@"\{(.*?)\}"); 
var m = r.Match("{abc}"); 
Console.WriteLine(m.Groups[0].Value); 

而且它让我"{abc}",而我希望它得到的东西放在括号里​​。是不是Value

而且,我不知道这是可能的,但我想在的情况下最paranthesis,他们是嵌套的,例如

"{{abc}" - >"{abc"

+3

一般来说,正则表达式返回捕获组将返回导致匹配/捕获的整个字符串作为var中包含捕获数据的第一个/第0个参数。相反,请检查'groups [1]'。 –

+0

尽管正则表达式在这里不是问题,但是在括号内没有转义的右括号,捕获括号内的东西的标准方法是'“\ {[^}] \}”'。 – fabianegli

+0

[Match.Groups](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v = vs.110).aspx):“如果正则表达式引擎可以找到匹配项,Group属性返回的GroupCollection对象(索引为0的元素)的第一个元素包含一个匹配整个正则表达式模式的字符串“... –

回答

3

它让我 “{} ABC”,而我希望它得到的东西,在括号, “ABC” 之间。这不是价值吗?

不,看看Groups[1]这是第一场比赛取胜,而Groups[0]是整场比赛。

匹配捕获是在正则表达式匹配中的(...)与从1到n的连续顺序编号的匹配。而其它的项目是匹配但不是捕获和索引为0


“{{ABC}” 在整个比赛发现 - > “{ABC”

尝试{+([^}]+)}作为+旁边{模式告诉正则表达式解析器找到1以上的{


注意有时一个不希望处理匹配捕获索引,那么可以使用命名比赛捕捉比如这个文字例如:

{+(?<TextBetweenTheBrackets>[^}]+)}

,然后提取值在括号之间为

Groups["TextBetweenTheBrackets"].value

相关问题