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

C# 在.NET中使用正则表达式从字符串中提取标记,c#,.net,regex,algorithm,C#,.net,Regex,Algorithm,我很好奇这在正则表达式中是否可行。我想从字符串中提取令牌,类似于: Select a [COLOR] and a [SIZE]. 好的,很简单-我可以使用(\[[A-Z]+\]) 但是,我还想提取标记之间的文本。基本上,我希望上面的匹配组是: "Select a " "[COLOR]" " and a " "[SIZE]" "." 最好的方法是什么?如果有一种方法可以用正则表达式实现这一点,那就太好了。否则,我猜我必须提取标记,然后手动循环通过MatchCollection,并根据每个匹配的

我很好奇这在正则表达式中是否可行。我想从字符串中提取令牌,类似于:

Select a [COLOR] and a [SIZE].
好的,很简单-我可以使用
(\[[A-Z]+\])

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

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

最好的方法是什么?如果有一种方法可以用正则表达式实现这一点,那就太好了。否则,我猜我必须提取标记,然后手动循环通过MatchCollection,并根据每个匹配的索引和长度解析出子字符串。请注意,我需要保留字符串和令牌的顺序。有更好的算法来进行这种字符串解析吗?

使用
Regex.Split(s,@“(\[[a-Z]+\])”)
-它应该提供您所要的确切数组。Split获取捕获的组并将其转换为结果数组中的标记。

这里有一个不使用正则表达式(
Regex
)的方法,该方法使用
String.Split
,但会丢失分隔符

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