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

后端 未结 3 1817
暗喜
暗喜 2020-12-12 04:26

I am currently trying to achieve the relatively simple task of capturing values from a string which exist between sets of curly braces using a regular expression. The expres

相关标签:
3条回答
  • 2020-12-12 04:43

    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.

    0 讨论(0)
  • 2020-12-12 04:49

    You can use lookarounds:

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

    or use matched group #1.

    0 讨论(0)
  • 2020-12-12 04:56

    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.

    0 讨论(0)
提交回复
热议问题