Regex Match.Value returning entire value, not the matched groups

强颜欢笑 提交于 2019-11-28 14:31:24

You used capturing groups (...), so what you want is in the Groups[1]:

Regex regex = new Regex(@"\{(\w+)\}");

MatchCollection matches = regex.Matches(str);

foreach (Match match in matches) {
    Console.WriteLine(match.Groups[1].Value);
} 

Another way is to use zero-width assertions:

Regex regex = new Regex(@"(?<=\{)(\w+)(?=\})");

MatchCollection matches = regex.Matches(str);

foreach (Match match in matches) {
    Console.WriteLine(match.Value);
} 

In this way the Regex will search for \w+ that is preceded and followed by the { and }, but these two characters won't be part of the match.

You can use lookarounds:

Regex regex = new Regex( @"(?<=\{)(\w+)(?=\})");

or use matched group #1.

You can use

Console.WriteLine(match.Groups[1].Value);

From MSDN:

If the regular expression engine can find a match, the first element of the GroupCollection object (the element at index 0) returned by the Groups property contains a string that matches the entire regular expression pattern. Each subsequent element, from index one upward, represents a captured group, if the regular expression includes capturing groups.

So match.Groups[0].Value is {Value1} itself and match.Groups[1].Value is Value1.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!