Expresii regulate si Regulazy

Am avut de facut urmatoarea chestie : de citit fisiere dintr-un folder si updatat text-ul din ele ( erau niste csv-uri) cu portiuni din denumire( de exemplu, daca fisierul se numeste vinzari_123 sa pun in fisier 123 la fiecare rind) . Normal ca m-am gindit sa il fac cit mai “extensibil” – pentru ca nu stiu forma sub care vin fisierele – asa ca m-am gindit sa evaluez ceea ce obtin cu expresii regulate – si sa le pun intr-un fisier de configurare( despre ConfigurationSection intr-un post viitor). Dar nu mai tineam minte sintaxa – in schimb tineam minte ca Roy Osherove a facut un Regulazy ( vedeti pagina http://weblogs.asp.net/rosherove/pages/tools-and-frameworks-by-roy-osherove.aspx ).

Cum se utilizeaza : Pui textul in casuta si apesi Regex_edit

102153_ReguLazy by Roy Osherove Beta_active

Incepi sa subliniezi portiuni din text si dai click dreapta ( eu am facut asta cu vinzari –si am selectat “1 or more anything”. Apoi am selectat _ , am dat click dreapta si am selectat “exactly _”  . In sfirsit am selectat 123 ,am dat click dreapta si am selectat “digits”.Iar click dreapta pe 123 selectat si dau “rename”  – si ii pun numele “values”. Daca apas acum pe “test again input” se vede clar ca obtin in “values” ce am nevoie – si anume 123.

102804_ReguLazy by Roy Osherove Beta_active

Ce mai am de facut este sa apas pe “generate”  si a iesit codul :

public void SampleRegexUsage()
{
    string regex=@"^\w+?_(?<values>\d+)$";
    RegexOptions options = RegexOptions.Multiline;
    string input= @"vinzari_123";
    MatchCollection matches = Regex.Matches(input,regex,options);
    foreach (Match match in matches)
    {
        Console.WriteLine(match.Value);
        Console.WriteLine("values:" + match.Groups["values"].Value);
    }
}

( ma rog, trebuie sa scot multiline si sa scot ^ de la inceput … – dar fara asta e corect!)

Eu zic ca e un tool super rapid si usor de folosit( si free ;-)  – si bun pentru cazul cind nu folosesti de multe ori expresii regulate.

Leave a Reply

Your email address will not be published. Required fields are marked *