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
*/