我正在使用Regex.Matches()解析来自大型文本文件的一串匹配。是否从C#的Regex.Matches返回的数组的顺序保证按照文本的顺序?
该函数是否有任何文档保证Matches数组中的第一项将与文本中的第一个匹配对应,Matches数组中的第二个项与文本中的第二个匹配项相对应?
它似乎是基于Regex.Match的文档严重隐含的,但我无法找到证明Regex.Matches将始终按文本中找到的顺序返回匹配。
编辑
我发现一个整洁的网站,让你去通过.NET源代码。
我们看到的比赛返回一个新MatchCollection,因为它的使用,直到其推迟执行不执行任何操作。
我们看到,对于MatchCollection主要数据结构是一个ArrayList,它不保证秩序。
_regex = regex;
_input = input;
_beginning = beginning;
_length = length;
_startat = startat;
_prevlen = -1;
#if SILVERLIGHT
_matches = new List<Match>();
#else
_matches = new ArrayList();
#endif
_done = false;
而且该GetMatch函数运行在文本中的顺序正则表达式,将每一场比赛,因为它沿到主数组列表去。
Match match;
do {
match = _regex.Run(false, _prevlen, _input, _beginning, _length, _startat);
if (!match.Success) {
_done = true;
return null;
}
_matches.Add(match);
这对于我来说已经足够了。
*总是在左到右线性方式处理* RegexOptions.RightToLeft'然后做了什么? – PetSerAl
@PetSerAl足够:) –
你的解决方案是聪明的,我可以自己订购它。谢谢! – tt9