Je to efektivní?   zodpovězená otázka

VB.NET

Docela jsem si oblíbil Regexp třídu, ale mám obavy, zda ji někdy nepoužívám zbytečně moc. A tak se s vámi podělím a třeba mi poradíte nějaké rychlejší/lepší alternativy.

Problém 1. Vyčištění řetězce od nežádoucích znaků. Lze následující kód zapsat bez použití regexp?

retezec = RegularExpressions.Regex.Replace(retezec, "[^a-zA-Z0-9]", "")

Problém 2. Dále, když hledáte řekněme 20 různých slov v textu, které následně nahrazujete nebo barvíte (ale musíte vědět pozici výskytu). Používám funkci regexp.matches, do které pustím všech 20 slov oddělených ("|") s tím, že potom projdu vrácenou kolekci MatchCollection. Jde to nějak lépe?

Problém 3. A ještě jeden. Jakým způsobem počítate počet konkrétních slov vyskytujících se v řetězci? Já opět používám regexp.matches s tím, že zjístím počet vrácených členů kolekce (.count). Nějaká alternativa?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je nutné si uvědomit, že regulární výrazy mají kromě svých výhod také dvě hlavní nevýhody:

1) blbě se luští, co vlastně dělají

2) jsou pomalé

Věci, které popisujete, bych regexpy řešil asi i já, počítání slov, vyhledávání více slov najednou a vyčištění nežádoucích znaků, to je úloha pro regulární výrazy.

I když konkrétně ten váš regexp jde ještě drobně zoptimalizovat - když na konec přidáte +, bude daleko rychlejší, pokud někdo do řetězce dá skupinu nepovolených znaků - nebudou se nahrazovat po jednom, ale najednou.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback