【发布时间】:2013-12-16 00:35:54
【问题描述】:
这是我正在运行的代码:
Dim descriptionMatches As MatchCollection = Regex.Matches(pageJSON, "\[\[(([\w]+[\s]*)+)\]\], (([\w]+[\s]*)+)\\n")
Console.WriteLine(descriptionMatches.Count)
现在,一切正常,直到最后一行。看来 MatchCollection.Count() 方法执行起来确实需要很长时间,这么久,我已经运行程序超过 2 分钟了……
这里有一些附加信息。
当我将正则表达式模式缩减为
"\[\[(([\w]+[\s]*)+)\]\]"时,我得到了 35 个匹配项,而且这似乎是瞬间完成的。当我使用 for 循环解析 MatchCollection 时,如果我使用 for i=0 形式的循环来匹配collection.count,则不会执行循环(就像正则表达式仍在尝试分析输入字符串。如果我对每个都使用 a(不同之处在于最新的使用迭代器),我会在它冻结之前到达大约第 15 个匹配项。很奇怪不是吗?
这是我要匹配的字符串的链接,如您所见,它不是有史以来最长的字符串:Wikipedia API result for SRS
如果我的模式有问题,而您想建议我一个新模式,我要匹配的内容如下所示:
[[项目名称]],项目描述\n
我过去经常使用正则表达式,但我从来没有遇到过这种情况。如果有人知道是什么问题,请告诉我这是什么问题以及如何解决?
【问题讨论】:
-
提示:
[\w]→\w,[\s]→\s。并尝试用(\w+\s+)*\w+替换(\w+\s*)+。并使用逐字字符串@"…\n",这样您就不必双重转义。
标签: .net regex vb.net performance