re = new Regex ((.*?)someliteraltext(.*?moreliteral), RegexOptions.Singleline);
re.Match(c);
请注意,使用了Singleline,因此“。”匹配换行符。
我在大约100k个字符的文本块上运行它并运行几分钟。
可以更快吗?
答案 0 :(得分:3)
我同意评论说最有可能放慢速度的是开始(。*?)。如果你在第一个“someliteraltext”前面有1000个字符,那就是正则表达式那部分的1001个匹配。 @CodeInChaos建议用^
作为前缀(字符串的开头)是限制这些匹配的快速方法。如果这是不可接受的,你需要解释更多你想要做的事情,以获得更好的答案。
答案 1 :(得分:2)
这很慢,因为它需要大量的回溯。这篇文章:
http://www.regular-expressions.info/engine.html
可能会让你知道它正在做多少工作。
正如@Wrikken建议的那样,删除最初的“(。*?)”。此捕获组将捕获从字符串开头到“someliteraltext”的所有内容。
或者,使用“IndexOf”查找“someliteraltext”,然后使用“moreliteral”。那应该更快。