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

Offline xnukes

  • Mladík
  • **
  • Příspěvků: 66
  • 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

  • Mladík
  • **
  • Příspěvků: 66
  • 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é.

Online Delfin

  • Guru
  • *****
  • Příspěvků: 603
  • Karma: 27
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 »
I'm a soldier, so don't panic!

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1306
  • 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 »

Online Delfin

  • Guru
  • *****
  • Příspěvků: 603
  • Karma: 27
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 »
I'm a soldier, so don't panic!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2001
  • Karma: 103
    • 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ů: 2001
  • Karma: 103
    • 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ů: 1306
  • 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ů: 1306
  • 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?

Online Delfin

  • Guru
  • *****
  • Příspěvků: 603
  • Karma: 27
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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...
I'm a soldier, so don't panic!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2001
  • Karma: 103
    • 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ů: 2001
  • Karma: 103
    • 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

Online Delfin

  • Guru
  • *****
  • Příspěvků: 603
  • Karma: 27
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 »
I'm a soldier, so don't panic!

 

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í:
Kolik je šest plus čtyři (slovem):