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

时间:2011-05-02 08:25:53

标签: c# .net regex algorithm

我很好奇是否可以使用Regex。我想从类似于:

的字符串中提取标记
Select a [COLOR] and a [SIZE].

好的,很简单 - 我可以使用(\[[A-Z]+\])

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

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

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

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:0)

这是一种不使用使用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
        // .