我在下面的表格中有一个字符串 - 小提琴see here。
{[(0.3; 0.43)(10; 8.2)(0; 0)(0.7888; 12.345)]:8.56 / 13.9}
我想过滤掉括号中的坐标。因此,匹配我设置的模式识别出一对括号(两个用于转义分组的反斜杠)。然后,它创建一个组,在其内部具有最小字符集,只要它们用分号分隔并括在括号中即可。根据调试器,我有四个匹配,这表明它是正确的。但是,当我访问分组时,我看到两个元素 - 一个包含一对括号而另一个没有。
Regex regex = new Regex("\\((.*?;.*?)\\)");
string full = regex.Matches(figure.ToString())[0].Value;
string with = regex.Matches(figure.ToString())[0].Groups[0].Value;
string sans = regex.Matches(figure.ToString())[0].Groups[1].Value;
我不完全确定第一组( Groups [0] )从哪里获取信息。我怀疑我没有足够好地表达正则表达式,并且它实际上对转义的括号作出反应,就好像它也是一个分组一样。我是否正确怀疑?我应该如何改写表达方式?
答案 0 :(得分:2)
来自https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v=vs.110).aspx:
如果正则表达式引擎可以找到匹配项,则Groups属性返回的GroupCollection对象的第一个元素(索引0处的元素)包含一个与整个正则表达式模式匹配的字符串。
因此Groups[0]
具有您匹配的整个值(例如(1;2)
),而Groups[1]
是第一个匹配的子群(例如1;2
)。
答案 1 :(得分:0)
括号中的任何内容都被视为一个组。如果您不希望在匹配中考虑该组,则应在其前面添加“?:”
(?: REGEX)
会导致该组被忽略,但仍与
匹配