Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式匹配两个括号内的子字符串,例如[我想要此文本],但不包括括号?_C#_.net_Regex - Fatal编程技术网

C# 正则表达式匹配两个括号内的子字符串,例如[我想要此文本],但不包括括号?

C# 正则表达式匹配两个括号内的子字符串,例如[我想要此文本],但不包括括号?,c#,.net,regex,C#,.net,Regex,我已经设法找到了正则表达式,几乎得到了我想要的结果 Regex r1 = new Regex(@"\[(.*?)\]"); string row = HEADERNAMES[COL1,COL2,COL3,COL4]; Match match = r1.Match(row); string result = match.ToString(); 输出:“[COL1,COL2,COL3,COL4]” 我知道我可以使用: result.Replace("[", ""); result.Replace(

我已经设法找到了正则表达式,几乎得到了我想要的结果

Regex r1 = new Regex(@"\[(.*?)\]");
string row = HEADERNAMES[COL1,COL2,COL3,COL4];
Match match = r1.Match(row);
string result = match.ToString();
输出:“[COL1,COL2,COL3,COL4]”

我知道我可以使用:

result.Replace("[", "");
result.Replace("]", "");
为了得到我想要的,但是我想知道是否有一种方法可以在不执行String方法的情况下从Regex结果中ommit delimeters[和]

我本以为有一个更优雅的解决方案使用正则表达式本身


提前感谢。

在“Aku”提出的解决方案中有一个要点需要注意(我还没有代表对此发表评论)

Regex r1 = new Regex(@"\[(.+)\]");
string row = "HEADERNAMES[COL1, COL2, COL3, COL4]";
// Regex puts capture groups (i.e. things captured between ( and ) ) 
// in Groups collection
string match = r1.Match(row).Groups[1].Value;
//match = "COL1, COL2, COL3, COL4"

您应该注意,Groups集合中的第二项提供了所需的值。第一项(组(0))相当于整个匹配字符串(Match.ToString()或Match.Value)

另一种方法是这样做,尽管我认为它比aku的示例慢一点,如下所示:

        Regex r1 = new Regex(@"(?<=\[).*(?=\])");
        string row = "HEADERNAMES[COL1, COL2, COL3, COL4]";
        Match match = r1.Match(row);
        Console.WriteLine(match.ToString());

        /* Output:
        COL1, COL2, COL3, COL4
        */

Regex r1=new Regex(@“(?您最好使用“?”quantor使“+”quantor不贪婪,或者使用“[^\]]+”。您不需要“?”字符串中只能有一个HEADERNAMES模式,列名部分不能有“]”。我强烈建议使用Split(),因为可读性更好。
        Regex r1 = new Regex(@"\[(?:(?<colName>[^,\]]*)(?:,\s)?)*\]");
        string row = "HEADERNAMES[COL1, COL2, COL3, COL4]";
        Match match = r1.Match(row);

        foreach(Capture c in match.Groups["colName"].Captures)
            Console.WriteLine(c.ToString());

        /* Output:
        COL1
        COL2
        COL3
        COL4
        */