Diskuze: regex pattern
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, podle mě něco takového:
string text = "7.16502E-03\0\u001\0";
string pat = @"[^\\]+";
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
Match m = r.Match(text);
A první namatchovaný substring by měl být ten, který hledáš.
Zkus tohle
^(?!\\)(-|\+|)\d+(\.\d+)?(E(-|\+)\d+)?
Vezme to desetinná čísla (i ne-desetinné), může (nebo nemusí) před tím být + nebo - a nesmí před tím být lomeno. Za číslem může (nebo nemusí) být E (+ nebo -) číslo. Jestli to má fungovat na více řádcích, nezapomeň na flag multiline. Můžeš si to vyzkoušet tady: https://regexr.com/
EDIT: Jestli potřebuješ vytáhnout všechny znaky (ne jenom čísla), použij řešení gcx11 - moje bere jenom čísla
gcx11:dík
Petr: super, to zkusím! Díky za popis. Akorát neměl by na konci být i
dolar?
Tedy nějak takto: (@"^(?!\\)(-|\+|)\d+(\.\d+)?(E(-|\+)\d+)?$"); nebo je to
jedno? (píšu to v c#)
Nějak nechápu co přesně v tomto patternu:
@"[-+]?([0-9]*\.[0-9]+|[0-9]+)"); dělá tento znak |, resp. celá tato část
*\.[0-9]+|[0-9]+) Je to opravdu jen pouze to, že to vybere všechny čísla za
desetinou tečkou než narazí na jiný znak?
Moc díky!
gcx: a bude to fungovat, i pokud bude na začátku znaménko +/- ? Resp, aby to bralo i to minus.
Aha, potřebuju vytáhnout i to Éčko, aby to ukazovalo ve správných
jednotkách.
No když zkusím zadat to řešení od gcx to regexr.com tak mi to najde to
shodu ve všech těchto znacích 0.215\0\u001 kromě \. Tak nevím jestli to
není třeba tim @ pred celym vyrazem?
Není, to @ je funkce C#, která říká, aby byly zpáteční lomítka ve stringu považovány za normální znaky.
Třeba string se dvouma zpátečníma lomítkama můžeš zapsat takhle:
string s = "\\\\";
string s = @"\\";
Ahoj, dva dny studuji regex, lecos už jsem zvládl, ale napsat konstrukci, která smaže každou větu obsahující vybrané slovo nikoli. Vše je jednoduché do doby, kdy jsou věty samostatné, tj. každá v jiném odstavci. Jakmile se však jedná o souvislý text (věty oddělené tečkou) jsem v koncích.
I když nemám k IT daleko a před 30 lety jsem i programoval , tak už to mozek nedává.
Konkrétně bych potřeboval smazat věty například z textu "Reishi (ganoderma neboli lesklokorka lesklá) je jednou z nejužívanějších vitálních hub. Zvolte ideální poměr polysacharidů, triterpenů a dalších bioaktivních látek pro nejlepší výsledky. O pěstování naší Reishi si můžete přečíst zde. V čínské medicíně se Reishi používá k podpoře vitality a obranyschopnosti. Testujeme každou šarži. Tyto testy si můžete prohlédnout zde, zde a zde.
Našel by se někdo, kdo by mě pomohl? Díky!
C zapis neznam, jen php, javascript.
Pro vice radku je treba pridat modifikator /m, ze string nekonci znakem noveho
radku \n.
http://www.regexp.cz/
3. Modifikátory = Víceřádkový režim (/m, používá PHP preg, Perl,
PCREGrep)
.* - 0-n jakychkoliv znaku
.*?cokoliv znamena jakykoliv znak, pokud tam neni slovo
^.*?slovo - slovo na konci
slovo.*?[.]|$ - tecka nebo konec stringu ($) na konci
slovo.*?.
cili, z tech poslednich tri bys mel poskladat reg, vyraz.
Treba, kdyz chci ziskat class z html kodu
^slovo$|\s+slovo$|\s+slovo\s+
"slovo" - na zacatku
"text slovo" - na konci
"text slovo text" - uprostred
\s - mezera, \n new line, \r return, \t tabelator
Mimochodem, ma obvykla otazka je, co jsi nasel googlem? Ty jsi vubec negoogloval? Tak v tom pripade cekej, zda a jestli nekdo napise na forum jeste tento rok, pac takove muze byt bezne zpozdeni
Oprava, samozrejme tam musi byt 4 podminky vyskytu.
^slovo$|^slovo\s+|\s+slovo$|\s+slovo\s+
"slovo" - pouze slovo
"slovo text" - na zacatku
"text slovo" - na konci
"text slovo text" - uprostred
Misto \s muze byt klidne [\D\W]+ ne-cislo nebo ne-znak, opakovane 1-nekonecno
Zobrazeno 10 zpráv z 10.