Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Reguläre Ausdrücke...wie? (https://www.delphipraxis.net/47799-regulaere-ausdruecke-wie.html)

glkgereon 16. Jun 2005 12:54


Reguläre Ausdrücke...wie?
 
Hi

ich versuch mich grad mit regulären ausdrücken...hab gesucht, aber nicht wirklich was brauchbares gefunden :(

mir schwebt sowas in der art vor:

Ausgangsstring: Hallo - Du - Bla-Wuppdi.abc
Maske1: %titel% - %wort% - %test%-%name%.%endung%
Maske2: %name% - %test% - %titel% - %wort%.%endung%
Ausgabestring: Wuppdi - Bla - Hallo - Du.abc

ich hoffe es wird klar was ich will...

dazu hätte ich 2 fragen:
sind das überhaupt reguläre ausdrücke?
wie kann man sowas halbwegs einfach realisieren?

SubData 16. Jun 2005 12:56

Re: Reguläre Ausdrücke...wie?
 
Ich würde in dem Fall auf das RegExp Studio verweisen :)

glkgereon 16. Jun 2005 13:30

Re: Reguläre Ausdrücke...wie?
 
das sieht sehr gut aus!!!

ich habe folgendes beispiel gefunden:

Delphi-Quellcode:
function ParsePhone (const AInputString, ATemplate : string) : string;
const
   IntPhoneRE = '(\+\d *)?(\(\d+\) *)?\d+(-\d*)*';
var
   r : TRegExpr;
begin
   r := TRegExpr.Create;
   try
      r.Expression := IntPhoneRE;
      if r.Exec (AInputString)
         then Result := r.Substitute (ATemplate)
         else Result := '';
      finally r.Free;
   end;
end;
begin
   ParsePhone ('Phone of AlkorSoft (project PayCash) is +7(812) 329-44-69',
   'Zone code $1, city code $2. Whole phone number is $&.');
   // Rückgabe: 'Zone code +7, city code (812) . Whole phone number is +7(812) 329-44-69.'
end.
jedoch auch mithilfe dieser Seite gelingt es mir nicht die function so umzubauen das ich sie für meine zwecke nutzen könnte :(

was ich möchte is einfach nur folgendes:
$1 + string + $2 + string
umsortieren im prinzip...also zb in
string + $2 + $1 + string

wie geht das?

S2B 16. Jun 2005 13:37

Re: Reguläre Ausdrücke...wie?
 
Zitat:

Zitat von glkgereon
Ausgangsstring: Hallo - Du - Bla-Wuppdi.abc
Maske1: %titel% - %wort% - %test%-%name%.%endung%
Maske2: %name% - %test% - %titel% - %wort%.%endung%
Ausgabestring: Wuppdi - Bla - Hallo - Du.abc

^(\w+) - (\w+) - (\w+)-(\w+).([a-zA-Z0-9]+)$

Evtl. irgend so was. :wink:

Edit: Du könntest es natürlich auch noch auf Wortgrenzen etc. erweitern, aber da ist immer die Frage, ob das für den aktuellen Fall Sinn macht. :wink:

Edit2: Fehler korrigiert. :roll:

derHund 16. Jun 2005 13:46

Re: Reguläre Ausdrücke...wie?
 
der punkt muß noch maskiert werden.

also, statt . sollte \. verwendet werden.

S2B 16. Jun 2005 13:47

Re: Reguläre Ausdrücke...wie?
 
Zitat:

Zitat von derHund
der punkt muß noch maskiert werden.

Stimmt. :wall:

glkgereon 16. Jun 2005 13:50

Re: Reguläre Ausdrücke...wie?
 
und wie muss das Template aussehen damit das richtig eingesetzt wird?

S2B 16. Jun 2005 13:53

Re: Reguläre Ausdrücke...wie?
 
Zitat:

Zitat von glkgereon
und wie muss das Template aussehen damit das richtig eingesetzt wird?

Aso, das gibt's ja auch noch. :stupid:

Code:
$4 - $3 - $1 - $2.$5

glkgereon 16. Jun 2005 14:42

Re: Reguläre Ausdrücke...wie?
 
ich hab mal versucht folgendes zu basteln:

ein user gibt ja lieber %%Titel%% und %%Album%% statt (\w+) und $1 ein...daher möchte ich "userfreundlich" in "programmfeundlich" konvertieren

dazu hab ich folgenden code...und der sollte funzen!!!
Edt_Simple_InMask ist ein string wie 'ab - %%cd%% - ef'
Edt_Simple_OutMask ist ein string wie '%%cd%% - ab - ef'
wobei die "variablen" dadrin gleich sein müssen...

Edt_Template enthält nachher das Template
Edt_Struktur enthält nachher die "suchformel" oder wie immer man das nennen soll...

ich muss noch "spezialvariablen" einbauen (zb. für dateiendung...)

Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var Vars: TStringList;
    InMask, OutMask, AktVar: String;
    NextPos: Integer;
begin
  InMask:=Edt_Simple_InMask.Text;
  OutMask:=Edt_Simple_OutMask.Text;
  Vars:=TStringList.Create;
  while Pos('%%',InMask)>0 do
    begin
    NextPos:=Pos('%%',InMask);
    Vars.Add(copy(InMask,NextPos+2,PosEx('%%',InMask,NextPos+2)-NextPos-2));
    Delete(InMask,NextPos,PosEx('%%',InMask,NextPos+2)+2-NextPos);
    Insert('(\w+)',InMask, NextPos);
    end;
  Edt_Struktur.Text:='^'+InMask+'$';


  while Pos('%%',OutMask)>0 do
    begin
    NextPos:=Pos('%%',OutMask);
    AktVar:=copy(OutMask,NextPos+2,PosEx('%%',OutMask,NextPos+2)-NextPos-2);
    Delete(OutMask,NextPos,PosEx('%%',OutMask,NextPos+2)+2-NextPos);
    Insert('$'+IntToStr(Vars.IndexOf(AktVar)+1),OutMask, NextPos);
    end;

  Edt_Template.Text:=OutMask;

  Vars.Free;
end;

glkgereon 16. Jun 2005 18:19

Re: Reguläre Ausdrücke...wie?
 
was heisst es wenn Exec False zurückibt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz