在.NET中使用正则表达式从字符串中提取标记

我很好奇是否可以使用正则表达式。 我想从类似于以下字符串的字符串中提取标记:

Select a [COLOR] and a [SIZE]. 

好的,很简单 – 我可以使用(\[[AZ]+\])

但是,我还想在令牌之间提取文本。 基本上,我希望上面的匹配组是:

 "Select a " "[COLOR]" " and a " "[SIZE]" "." 

对此最好的方法是什么? 如果有办法用RegEx做到这一点,那就太好了。 否则,我猜我必须提取标记,然后手动循环遍历MatchCollection并根据每个匹配的索引和长度解析子字符串。 请注意我需要保留字符串和标记的顺序。 有没有更好的算法来进行这种字符串解析?

使用Regex.Split(s, @"(\[[AZ]+\])") – 它应该为您提供您所追求的确切数组。 拆分捕获的组并将它们转换为结果数组中的标记。

这是一种不使用使用String.Split正则表达式( Regex )的方法,但是你丢失了分隔符。

  string s = "Select a [COLOR] and a [SIZE]."; string[] sParts = s.Split('[', ']'); foreach (string sPart in sParts) { Debug.WriteLine(sPart); } // Select a // COLOR // and a // SIZE // .