在.net中使用正则表达式从字符串中提取令牌

本文关键字:字符串 提取 令牌 net 正则表达式 | 更新日期: 2023-09-27 17:54:02

我很好奇这对于Regex是否可能。我想从类似于

的字符串中提取令牌:
Select a [COLOR] and a [SIZE].

很简单,我可以用('[[A-Z]+'])

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

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

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

在.net中使用正则表达式从字符串中提取令牌

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