Objevil jsem Ameriku, tak si to musím zapsat. Krátká poznámka k tomu, co vlastně v C# dělá znak @ umístěný v kódu přímo před řetězec typu string.
V regulárních výrazech se bílé znaky v pattern značí sekvencí \s. Problém je, že se nejedná o standardní escape sekvenci, takže pokud ji použijete v rámci výrazu (a tedy uvnitř řetězce), kompilátor zařve, že sekvenci nezná (analogicky to samozřejmě platí i pro další nestandardní sekvence používané v regulárních výrazech, já potřeboval hledat bílé znaky, proto jsem použil \s).
A odtud je jen krůček k zavináči z nadpisu. Pokud jej totiž umístíte před řetězec, kompilátor ho zpracuje tak, jak je – tedy bez ohledu na escape sekvence. Pokud bychom například chtěli zapsat cestu souborového systému, můžeme to udělat třeba takto klasicky:
string cesta = "C:\\Adresar\\Soubor.txt";
Nebo s použitím @ takto:
string cesta = @"C:\Adresar\Soubor.txt";
A protože není problém kombinovat „doslovné“ řetězce s těmi escapovanými, vyřešil jsem svůj problém v regulárním výrazu následovně:
string pattern = "<td class=\"center\">" + @"[\s]+" + "([0-9]+)</td>";
Poznámka na závěr: Chceme-li napsat v doslovném režimu uvozovky („), je třeba je zdvojit: @"Ahoj, ""světe""!
„.
Áá, já věděl, že to bude nějaká prkotina :D… Ale všiml jsem si, že @ je velmi moderní psát všude poslední dobou. Děkuji za osvětlení ;)