using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
var lines_list = new List<string>();
var wordsArr = new string[]{"alpha", "beta", "gama", "delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "kaPPa", "LamBda", "mU", "Nu", "xi", "omicron", "pi", "rHo", "siGma", "Tau", "UpSiLoN", "pHi", "chi", "psi", "omega"};
var ss = new StringBuilder();
var rnd = new Random( 12345 );
for ( int i = 0; i < 50000; i++ )
var words_arr = new List<string>();
for ( int j = 0; j < rnd.Next(10,20); j++)
words_arr.Add( wordsArr[ rnd.Next( wordsArr.Length ) ] );
var tab_count = rnd.Next( 0, 5 );
var line = new StringBuilder();
for ( int k = 0; k < tab_count; k++ ) line.Append("\t");
foreach( var w in words_arr )
var result = line + "\n";
lines_list.Add( result );
Console.WriteLine( "Multiline:" );
var sw = new System.Diagnostics.Stopwatch();
var matches = Regex.Matches( str, "^\\s*(omicron|kappa|upsilon)\\b", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled );
Console.WriteLine( matches.Count );
Console.WriteLine("Time:" + sw.ElapsedMilliseconds + " ms.");
Console.WriteLine( "\n\nLine by line:" );
var spaces = new char[]{' ',' '};
var reOmicron = new Regex( "^omicron\\b", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Compiled );
var reKappa = new Regex( "^kappa\\b", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Compiled );
var reUpsilon = new Regex( "^upsilon\\b", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Compiled );
foreach( var line in lines_list )
var lline = line.TrimStart( spaces );
if ( reOmicron.IsMatch( lline ) )
if ( reKappa.IsMatch( lline ) )
if ( reUpsilon.IsMatch( lline ) )
Console.WriteLine( count );
Console.WriteLine("Time:" + sw.ElapsedMilliseconds + " ms.");