IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
safix01
Člen
Avatar
safix01:20.2.2018 20:39

Ahoj, nevíte někdo jak napsat regex pattern aby mi to vracelo pouze znaky před tímto znakem "\" (pouze prvním)
Mám string: "7.16502E-03\0\u001\0"

Toto mi vytáhne pouze cislo s deset. tečkou: Regex regex = new Regex(@"[-+]?([0-9]*\.[0-9]+|[0-9]+)");
tzn: 7.16502
Ale ja potrebuji vytahnout i udaj E-03 ,tedy (10−3). Nevíte jak přesně změnit ten pattern?
Nebo existuje ještě nějaká lepší možnost, jak dostat rovnou číslo 0.007165, které by to mělo vracet?
Díky za rady :)

Editováno 20.2.2018 20:40
 
Odpovědět
20.2.2018 20:39
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na safix01
gcx11:20.2.2018 20:59

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áš.

 
Nahoru Odpovědět
20.2.2018 20:59
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na safix01
Petr Šťastný:20.2.2018 21:02

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

Editováno 20.2.2018 21:04
 
Nahoru Odpovědět
20.2.2018 21:02
Avatar
safix01
Člen
Avatar
safix01:20.2.2018 21:12

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!

 
Nahoru Odpovědět
20.2.2018 21:12
Avatar
safix01
Člen
Avatar
Odpovídá na gcx11
safix01:20.2.2018 21:21

gcx: a bude to fungovat, i pokud bude na začátku znaménko +/- ? Resp, aby to bralo i to minus.

Editováno 20.2.2018 21:22
 
Nahoru Odpovědět
20.2.2018 21:21
Avatar
safix01
Člen
Avatar
Odpovídá na Petr Šťastný
safix01:20.2.2018 21:32

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?

Editováno 20.2.2018 21:34
 
Nahoru Odpovědět
20.2.2018 21:32
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na safix01
Petr Šťastný:20.2.2018 22:03

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 = @"\\";
 
Nahoru Odpovědět
20.2.2018 22:03
Avatar
Pavel Borovička:30.10.2021 12:35

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 :D, 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!

 
Nahoru Odpovědět
30.10.2021 12:35
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31.10.2021 19:23

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 :)

Editováno 31.10.2021 19:25
 
Nahoru Odpovědět
31.10.2021 19:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.11.2021 7:42

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
 
Nahoru Odpovědět
1.11.2021 7:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.