using System;
using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
Random
rand = new Random
();Func<string> getRandString = // generates 128 random characters.
() => Enumerable.
Range(0, 128).
Select(x
=> (char) rand.
Next()).
Aggregate("", (a
, b
) => a
+ b
); Func
<int
> getRandInteger
= () => rand.
Next(); // generates random number.string format = "{0}({1}|{2})";
// Generate the big string.
StringBuilder bigstr = new StringBuilder();
for (int i = 0; i < 10000; i++) // repeat 10000 times.
{
bigstr.Append(string.Format(format, getRandString(), getRandInteger(), getRandInteger()));
}
string input = bigstr.ToString();
Regex testRegex = new Regex(@"\(([-|+]?\d+\|[-|+]?\d+?)\)");
Stopwatch stopwatch = Stopwatch.StartNew();
var matches = testRegex.Matches(input);
var matchesCount = matches.Count;
stopwatch.Stop();
Console.WriteLine("Time Elapsed :\t{0}\nInputLength :\t{1}\nMatches Count :\t{2}", stopwatch.Elapsed, input.Length, matchesCount);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5UZXh0Owp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCgpSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKRnVuYzxzdHJpbmc+IGdldFJhbmRTdHJpbmcgPSAvLyBnZW5lcmF0ZXMgMTI4IHJhbmRvbSBjaGFyYWN0ZXJzLgogICAgKCkgPT4gRW51bWVyYWJsZS5SYW5nZSgwLCAxMjgpLlNlbGVjdCh4ID0+IChjaGFyKSByYW5kLk5leHQoKSkuQWdncmVnYXRlKCIiLCAoYSwgYikgPT4gYSArIGIpOwpGdW5jPGludD4gZ2V0UmFuZEludGVnZXIgPSAoKSA9PiByYW5kLk5leHQoKTsgLy8gZ2VuZXJhdGVzIHJhbmRvbSBudW1iZXIuCnN0cmluZyBmb3JtYXQgPSAiezB9KHsxfXx7Mn0pIjsKCi8vIEdlbmVyYXRlIHRoZSBiaWcgc3RyaW5nLgpTdHJpbmdCdWlsZGVyIGJpZ3N0ciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CmZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgLy8gcmVwZWF0IDEwMDAwIHRpbWVzLgp7CiAgICBiaWdzdHIuQXBwZW5kKHN0cmluZy5Gb3JtYXQoZm9ybWF0LCBnZXRSYW5kU3RyaW5nKCksIGdldFJhbmRJbnRlZ2VyKCksIGdldFJhbmRJbnRlZ2VyKCkpKTsKfQpzdHJpbmcgaW5wdXQgPSBiaWdzdHIuVG9TdHJpbmcoKTsKClJlZ2V4IHRlc3RSZWdleCA9IG5ldyBSZWdleChAIlwoKFstfCtdP1xkK1x8Wy18K10/XGQrPylcKSIpOwpTdG9wd2F0Y2ggc3RvcHdhdGNoID0gU3RvcHdhdGNoLlN0YXJ0TmV3KCk7CnZhciBtYXRjaGVzID0gdGVzdFJlZ2V4Lk1hdGNoZXMoaW5wdXQpOwp2YXIgbWF0Y2hlc0NvdW50ID0gbWF0Y2hlcy5Db3VudDsKc3RvcHdhdGNoLlN0b3AoKTsKQ29uc29sZS5Xcml0ZUxpbmUoIlRpbWUgRWxhcHNlZCA6XHR7MH1cbklucHV0TGVuZ3RoIDpcdHsxfVxuTWF0Y2hlcyBDb3VudCA6XHR7Mn0iLCBzdG9wd2F0Y2guRWxhcHNlZCwgaW5wdXQuTGVuZ3RoLCBtYXRjaGVzQ291bnQpOwoKCgl9Cn0=