[英]Regex to match a substring within 2 brackets, e.g. [i want this text] BUT leave out the brackets?
我已经设法找到正则表达式,以获得我想要的结果,即
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结果中省略delimeters [和]。
我原本以为使用Regex本身有一个更优雅的解决方案?
提前致谢。
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"
在“Aku”提出的解决方案中有一个重要的观点(我还没有代表发表评论)
您应该注意,Groups集合中的第2项提供了您需要的值。 第一项(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
*/
我不知道,但我怀疑你可能会在列名之后,并且即将在你的结果字符串上执行.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
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.