Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren? (https://www.delphipraxis.net/187078-suchen-ersetzen-mit-regex-wie-platzhalterwort-definieren.html)

TiGü 26. Okt 2015 14:23

Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Hallo zusammen,

ich stell mich zu dumm an für RegEx.
Ich versuche mit Delphi 2007 Codeabschnitte zu ersetzen und kriege es nicht hin.

Bspw. soll aus
Delphi-Quellcode:
var
  S : string;
begin
    S := S
      + GF + MT('TeFreezNrGes') + GF + TZ
      + GF + MT('TeFreezNrTeil') + GF + TZ
      + GF + MT('TeZeitVonS') + ' [s]' + GF + TZ;
folgendes werden:
Delphi-Quellcode:
var
  S : string;
begin
    S := S
      + FooBar(MT('TeFreezNrGes'))
      + FooBar(MT('TeFreezNrTeil'))
      + FooBar(MT('TeZeitVonS'));
Wie lautet der korrekte RegEx-Ausdruck, um ' GF + BELIEBIGERAUSDRUCK + GF + TZ' zu ersetzen?

geskill 27. Okt 2015 09:27

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Hey,

ich habe sowas ähnliches letztlich mit Delphi auch versucht, dann aber zu NotePad++ gegriffen.

Dort kannst du in Dateien suche und ersetzten und dabei auch Reguläre Ausdrücke verwenden (mWn kann selbst das aktuelle Sealte dies nicht). Auch kannst du es auf Ordner begrenzen und einen Dateiformat Filter verwenden. z.B. *.pas.

Ich habe meine Projekte immer in einem Verwaltungssystem, also wenn eine Ersetzung mal "Mist" macht, kann man dies fix wieder korrigieren.

Hier als kleine Hilfe zu den Ausdrücken:
https://regex101.com/r/fL2pR1/1

Liebe Grüße

TiGü 27. Okt 2015 09:46

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Hm, wenn ich den verlinkten RegEx-Ausdruck in Notepad++ mit den obigen Beispiel ausprobiere, natürlich mit aktivierten 'Reguläre Ausdrucke', dann ersetzt er mir die ganze Zeile mit FooBar(), aber ich hätte halt irgendwie gerne den inneren Teil (MT('TeFreezNrGes')) mit drin: FooBar(MT('TeFreezNrGes')).

Geht das überhaupt mit regulären Ausdrucken?

ULIK 27. Okt 2015 10:08

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Probier's mal mit
Code:
\s*GF\s*[+]\s*(.+\S)\s*[+]\s*GF\s*[+]\s*TZ
als regulären Ausdruck (ungreedy laufen lassen).
Klappt zumindest im UltraEdit ganz gut, wenn ich nach dem Ausdruck suche und durch ' Foobar($1) ' ersetzen lassen.

TiGü 27. Okt 2015 11:08

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hm, in Notepad++ ersetzt er nur eine Zeile von drei...bin ich zu dumm?
Siehe Bild-Anhang:

ULIK 27. Okt 2015 12:33

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Ich denke, daß Notepad++ hier nicht global arbeitet.

Du kannst es mal über diverse Online-Tools testen: z.B. https://regex101.com. Hier mußt Du die Option 'g' noch setzen, sonst wird nur der erste Treffer gefunden.

Aber Du willst es ja mit Delphi2007 machen: welche RegEx Bibliothek verwendest Du denn da?

TiGü 27. Okt 2015 13:12

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Ne, der Notepad++ ersetzt eigentlich mit Klick auf "Alle ersetzen" in der Regel alle Fundstellen.

Auch regex101.com kommt mit deinen letzten Vorschlag nicht zurecht (trotz g), siehe:
https://regex101.com/r/lM2mY9/1

Ich möchte es nicht unbedingt mit der alten IDE machen, ich kann mir auch andere (kostenlose) Texteditoren vorstellen.
Ich kam halt nur drauf, weil es im Suchen & Ersetzen Dialog ja den Haken für "Regular expressions" gibt.

Nochmal, ich möchte nicht zur Laufzeit mit einen Programm irgendwelche Strings auseinander nehmen, sondern alte Quelltexte vereinfachen, weil diese String-Konkatenation sehr sehr häufig vorkommt.

Stevie 27. Okt 2015 14:09

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Mit Notepad++

Suche nach: \s*GF\s*[+]\s*(.+\S)\s*[+]\s*GF\s*[+]\s*TZ
Ersetzen mit: Foobar\($1\)

TiGü 27. Okt 2015 14:47

AW: Suchen & ersetzen mit RegEx - wie Platzhalterwort definieren?
 
Stevie ist mein Held!
Das funktioniert tadelos.
Ruckzuck sind 159 Vorkommen ersetzt.
Vielen vielen Dank! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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