我很好奇是否可以使用Regex。我想从类似于:
的字符串中提取标记Select a [COLOR] and a [SIZE].
好的,很简单 - 我可以使用(\[[A-Z]+\])
但是,我还想在令牌之间提取文本。基本上,我希望上面的匹配组是:
"Select a "
"[COLOR]"
" and a "
"[SIZE]"
"."
最好的方法是什么?如果有办法用RegEx做到这一点,那就太好了。否则,我猜我必须提取标记,然后手动循环遍历MatchCollection并根据每个匹配的索引和长度解析子字符串。请注意我需要保留字符串和标记的顺序。有没有更好的算法来进行这种字符串解析?
答案 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
// .