Autor Téma: Regex - Text pred pomlckou  (Přečteno 467 krát)

Offline xnukes

  • Mladík
  • **
  • Příspěvků: 62
  • Karma: 1
    • Verze Delphi: XE7
    • Bludspeed s.r.o.
Regex - Text pred pomlckou
« kdy: 08-11-2017, 15:56:01 »
Hojte, muzu vas poprosit o pomoc ? Ja jsem na regularni vyrazy byl vzdycky lempl :D A potreboval bych z ruznych retezcu napr. (CZ - Praga, A-Weikersdorf,I - Gradara) vypreparovat vzdy ty prvni pismenka dve nebo jedno, zalezi na uzivateli jak to tam zapsal, taky tam vubec byt nemusi.

Co myslite ? pujde to pres regular ? nebo to nekolika x podminkama ostrouhat ?

rustymattock

  • Host
Re:Regex - Text pred pomlckou
« Odpověď #1 kdy: 08-11-2017, 16:15:27 »
jestli je v každém výrazu jen jedna pomlčka tak třeba takhle.

function TForm1.SelectString(text: string):string;
var
  a:integer;
begin
  a:=pos(' -',text);
  result:=Copy(text,1,a-1);
end;

Offline Ján Masaryk

  • Nováček
  • *
  • Příspěvků: 47
  • Karma: 5
    • Verze Delphi: 2010
Re:Regex - Text pred pomlckou
« Odpověď #2 kdy: 08-11-2017, 17:03:30 »
... ak by sa ti náhodou stávalo, že raz budeš mať "CZ -" a inokedy "CZ-", tak by som to ešte upravil takto

Kód: Delphi [Vybrat]
  1. cStatSkratka := trim(Copy(text, 1, pos('-', text) - 1));
  2.  

lebo ak dáš " -" a v texte je "-", tak ti to vráti prázdny reťazec.


Offline JM

  • Nováček
  • *
  • Příspěvků: 1
  • Karma: 2
Re:Regex - Text pred pomlckou
« Odpověď #3 kdy: 08-11-2017, 22:19:47 »
Good
Rated 1 time
A co když tam bude třeba Baden-Baden? Pokud tam ten stát vůbec nemusí být,  pak to celé asi není dobře řešitelné.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 363
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:Regex - Text pred pomlckou
« Odpověď #4 kdy: 08-11-2017, 23:03:35 »
Excellent
Rated 1 time
A co když tam bude třeba Baden-Baden? Pokud tam ten stát vůbec nemusí být,  pak to celé asi není dobře řešitelné.

Z mleteho masa kravu neposkladas ;D Pokud ma uzivatel svobodu zadavat co ho napadne a to navic slepovane do jednoho pole (nebo takovy retezec dostanes na vstupu z jine aplikace), nemuze to skoncit jinak nez nespolehlivymi odhady.
« Poslední změna: 08-11-2017, 23:06:37 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1297
  • Karma: 28
    • Pepak.net
Re:Regex - Text pred pomlckou
« Odpověď #5 kdy: 09-11-2017, 06:29:14 »
Search: ^([A-Z]{,2})\s*-
Flags: Case sensitive

Jinak teda států není tolik a nemění se tak často, aby to nešlo vyjmenovat: ^(CZ|DE|I|...)\s*-
« Poslední změna: 09-11-2017, 06:30:48 od pepak »

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 363
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:Regex - Text pred pomlckou
« Odpověď #6 kdy: 09-11-2017, 06:54:27 »
Poor
Rated 1 time
Search: ^([A-Z]{,2})\s*-

Mel jsi nejspis na mysli (v kvantifikatoru je navic carka):

Kód: Delphi [Vybrat]
  1. ^([A-Z]{2})\s*-

Takovy vyraz ale nevybere jen ty 2 pismena. Vybere i tu pomlcku. Odpoved na otazku je (temer) fajn, ale pokud OP nepouziva ve svem projektu knihovnu regularnich vyrazu, netreba ji linkovat (a misto toho pouzit RTL funkce Delphi pro praci s retezci). P.S. https://regexr.com

Ten napad fixniho porovnavani kodu statu je blbost. Par set kilometru ode me se snazi jeden vytvorit. Co pak? Chces do nekonecna udrzovat takovy vyraz (nebo seznam statu pro nej)?
« Poslední změna: 09-11-2017, 07:00:17 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1845
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:Regex - Text pred pomlckou
« Odpověď #7 kdy: 09-11-2017, 07:00:18 »
Takovy vyraz ale nevybere jen ty 2 pismena. Vybere i tu pomlcku.
Ale ne, prece ten stat ma v zavorce jako group

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1845
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:Regex - Text pred pomlckou
« Odpověď #8 kdy: 09-11-2017, 07:05:31 »
Excellent
Rated 2 times
Z mleteho masa kravu neposkladas ;D Pokud ma uzivatel svobodu zadavat co ho napadne a to navic slepovane do jednoho pole (nebo takovy retezec dostanes na vstupu z jine aplikace), nemuze to skoncit jinak nez nespolehlivymi odhady.
Presne, jedna z nejidioctejsich praci, kterou jsem kdy delal, byla normalizace dat z nekdejsiho katalogu firem Edit. Jestli si to pamatuju, tak jenom v Praze tam bylo tusim 200k zaznamu a mam dojem, ze kdybys dostal za ukol vytvorit co nejvice zpusobů, jak zapsat adresu v Praze, ze bys za obsahem toho katalogu skoncil jako B

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1297
  • Karma: 28
    • Pepak.net
Re:Regex - Text pred pomlckou
« Odpověď #9 kdy: 09-11-2017, 07:05:38 »
Good
Rated 3 times
Search: ^([A-Z]{,2})\s*-

Mel jsi nejspis na mysli (v kvantifikatoru je navic carka):

Kód: Delphi [Vybrat]
  1. ^([A-Z]{2})\s*-
Ta čárka tam být musí. Mohla by před ní být jednička, to by asi bylo lepší, ale bez čárky je to blbě.

Citace
Takovy vyraz ale nevybere jen ty 2 pismena. Vybere i tu pomlcku.
Miluju, když do regexpů kecají lidi, kteří jim nerozumí. Ne, nevybere. Od toho tam je první podskupina, abych určil, co přesně se vybere.

Citace
Ten napad fixniho porovnavani kodu statu je blbost. Par set kilometru ode me se snazi jeden vytvorit. Co pak? Chces do nekonecna udrzovat takovy vyraz (nebo seznam statu pro nej)?
Ano. Že se jednou za deset let vytvoří nový stát, to neberu jako limit.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1297
  • Karma: 28
    • Pepak.net
Re:Regex - Text pred pomlckou
« Odpověď #10 kdy: 09-11-2017, 07:07:04 »
Btw., stejně ty státy budeš mít v databázi jako číselník, takže je udržovat budeš. Co je za problém, mít jedno políčko na "zkratka pro vstup X" a z tohoto políčka udělat seznam oddělený rourami?

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 363
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:Regex - Text pred pomlckou
« Odpověď #11 kdy: 09-11-2017, 07:07:52 »
Takovy vyraz ale nevybere jen ty 2 pismena. Vybere i tu pomlcku.
Ale ne, prece ten stat ma v zavorce jako group

Ta pomlcka na konci...
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1845
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:Regex - Text pred pomlckou
« Odpověď #12 kdy: 09-11-2017, 07:14:11 »
Ano. Že se jednou za deset let vytvoří nový stát, to neberu jako limit.
Ja bych se taky klonil k tomu, ze to problem neni a ze se to neobejde do zasahu programu.
Zalezi, co je to aplikace zac a k cemu ten stat potrebuje. Ale on ISO 3166-2 neni jediny kod, ktery pribyde. Dalsi bude kod jazyka, TLD domain, ICC v telefonii, sada svatku, casove pasmo etc...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1845
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:Regex - Text pred pomlckou
« Odpověď #13 kdy: 09-11-2017, 07:18:48 »
Ta pomlcka na konci...
Jenomze na takovyhle fidlatko rovnou zapomen - aniz by to zkousel, tak podle toho, co je na prvni pohled videt, ze je vubec k nicemu.

V run-time je normalni pouzit objekt Match, ktery obsahuje pole skupin, ktere to nalezlo, pri substituci se odkazuje na skupinu jako $1 nebo \1 podle toho, co je to za platformu

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 363
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:Regex - Text pred pomlckou
« Odpověď #14 kdy: 09-11-2017, 07:21:39 »
Poor
Rated 1 time
Miluju, když do regexpů kecají lidi, kteří jim nerozumí. Ne, nevybere. Od toho tam je první podskupina, abych určil, co přesně se vybere.

Dobra, zrejme se bavime o PCRE (implementace je soucasti Delphi pokud se nepletu), potom posli online ukazku. Mas k tomu napr. https://regex101.com. Je to tak slozite nebo se neda online priklad vyrobit?

Jinak si klidne vyrob vyraz z retezce sestaveneho z ciselniku. Me je to jedno. Osobne pro takovy pripad nebudu pouzivat regex.
« Poslední změna: 09-11-2017, 07:25:59 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: