Im String mit Regex Zeichen ersetzen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Im String mit Regex Zeichen ersetzen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo zusammen,

habe jetzt verschiedenste Regex Help Seiten durch, aber ich finde keine Hilfe, welche bei meiner Aufgabe zum Ziel führt.

Kurz und bündig.
Ich hab ein String mit einem Datumswert drin (es kann kein Datumsdatenelement verwendet werden), bei diesem muss die Uhrzeit, wenn 00 für Std. bzw. Min. drin steht, mit '--' ersetzt werden.

Bsp.
IST Zustand:
1. 202001221900 ( 22.01.2020 19:00 Uhr )
2. 202002141001 ( 14.02.2020 10:01 Uhr )
3. 202003150005 ( 15.03.2020 00:05 Uhr )
4. 202004300000 ( 30.04.2020 00:00 Uhr )

SOLL Zustand:
1. 2020012219--
2. 202002141001
3. 202003150005
4. 20200430----

Wie bekomme ich das hin? An Beispiel erkennt man, immer wenn Minute 00 ist, müssen die zwei 0er durch '--' ersetzt werden. Das gilt auch bei Std, aber nicht wenn die Minuten einen Wert haben.

Thx 4 help!

Grüße
Markus

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Im String mit Regex Zeichen ersetzen

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Regex brauche ich nie. Bei Deinem Beispiel ist der String ja immer genau 12 Zeichen lang. Ich würde da pragmatisch wie folgt rangehen:

Code: Alles auswählen.

REPLACE `0000` IN feld+8(4) WITH `----`.
REPLACE `00` IN feld+10(2) WITH `--`.
Fertig ist der Lack.

Re: Im String mit Regex Zeichen ersetzen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Danke DeathAndPain,

die Lösung habe ich schon. Ich würde aber gern eine RegEx Lösung haben ;)
Interessehalber .

Grüße
Markus

Re: Im String mit Regex Zeichen ersetzen

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
Etwas komplexer um glaubhaft nach dem Teilstring 20JJMMDDhhmm zu suchen

Code: Alles auswählen.

REPLACE REGEX '(20\d\d[012]\d[0123]\d)([012]\d[012345]\d)' with '$1--'
Und etwas kürzer wenn es einem reicht bei einer 12-stelligen Zahl die hinteren 4 Stellen mit -- zu ersetzen

Code: Alles auswählen.

REPLACE REGEX '(\d{8})(\d{4})' with '$1--'
Tipp: SE38 und dort das Programm DEMO_REGEX_TOY
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Im String mit Regex Zeichen ersetzen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hi Black_adept,

thx für die Antwort, leider ist der Ausdruck noch nicht ganz richtig, nutzt man diesen kommen folgende Ergebnisse zu den Werten aus meinem Bsp. .

1. 20200122‑‑
2. 20200214‑‑
3. 20200315‑‑
4. 20200430‑‑

Die Abhängigkeit von Std. zu Minute ist nicht dabei und schlussendlich müssten zumindest 4 '-' vorhanden sein, wenn man einfach ersetzt.

Ist es evtl. gar nicht möglich das Vorhaben mit Regex zu lösen?

Grüße
Markus

Re: Im String mit Regex Zeichen ersetzen

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
MarkusW hat geschrieben:
21.08.2020 08:29
Hi Black_adept,

thx für die Antwort, leider ist der Ausdruck noch nicht ganz richtig [...]

Die Abhängigkeit von Std. zu Minute ist nicht dabei und schlussendlich müssten zumindest 4 '-' vorhanden sein, wenn man einfach ersetzt.
OMG - eine meiner schlechtesten Antworten seit langem. Aufgabe nicht vollständig gelesen, verstanden schon gar nicht und dann eine Antwort gepostet, die nicht mal das macht was ich verstanden habe.
Ok - hier dann eine bessere Antwort, die zumindest für dein Beispiel eine korrekte Lösung herbeischummelt

Code: Alles auswählen.

replace regex '(00(?=00\>)|00\>)(?!(:|\sU))' in ... with '--'.
Geht sogar kürzer mit '(00(?=00\>)|00\>)' - aber dann werden auch die Nullen in der Uhrzeit ersetzt die als Erklärungstext dahinter stehen.
MarkusW hat geschrieben:
21.08.2020 08:29
Ist es evtl. gar nicht möglich das Vorhaben mit Regex zu lösen?
Mit den aktuellen ABAP-Mitteln wohl nicht, da eigentlich für eine halbwegs saubere Lösung ein "lookbehind" Operator existieren müsste, dieser aber für ABAP (noch) nicht implementiert ist sondern nur der "lookahead" operator. Und durch das fehlende "lookbehind" muss man für ein sinnvolles regex welches das Datum erkennt eben mit subgroups arbeiten und da überschneiden sich die subgroups for "YYYYMMDDhh00" und "YYYYMMDD0000", so dass nur eine und nicht beide Ersetzungen vorgenommen werden können.

Aber wer weiß - vielleicht kommt das ja irgendwann. --> viewtopic.php?t=22391 Auf dem neuesten System was ich unter den Fingern habe ( 7.54 = Kernel 7.77 ) ist der folgende reguläre Ausdruck mit lookbehind jedenfalls noch nicht gültig "(?<!a)b"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Im String mit Regex Zeichen ersetzen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Danke Black_adept.

Finde ich klasse das du nochmal nach gebessert hast ;)
Leider liefert deine neue Lösung auch kein korrektes Ergebnis... aber ich nehme es so hin, dass RegEx im ABAP(bis dato) kann das einfach nicht.

Grüße
Markus

Re: Im String mit Regex Zeichen ersetzen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Vielleicht habe ich mich im ersten Post auch etwas unklar ausgedrückt...die Werte in Klammern sind nur informell.
Regex muss nur das umsetzen:
202001221900
202002141001
202003150005
202004300000

Grüße
Markus

Re: Im String mit Regex Zeichen ersetzen

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
MarkusW hat geschrieben:
24.08.2020 11:13
Leider liefert deine neue Lösung auch kein korrektes Ergebnis... aber ich nehme es so hin, dass RegEx im ABAP(bis dato) kann das einfach nicht.
Was geht denn da nicht?
demo_regex_toy.png

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
MarkusW

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Im String mit Regex Zeichen ersetzen

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hi,

Jetzt seh ichs...hab deine Codezeile abgeschrieben und anstatt nach zu denken hab ich gleich hier geschrieben...*schäm*

Du hattest das 'ALL OCCURRENCES' nicht angegeben...im Testprogramm ist es eine Auswahl...wenn man im ABAP das schreibt, muss man das im Befehl mitgeben :D

Klappt soweit :D Thx!

Grüße
Markus

Seite 1 von 1

Vergleichbare Themen

5
Antw.
1249
Views
Letzte String Zeichen ersetzen
von ichse18577 » 13.11.2019 14:02 • Verfasst in ABAP® für Anfänger
2
Antw.
714
Views
Regex in FIND erste Zeichen prüfen.
von msfox » 02.10.2023 11:27 • Verfasst in ABAP® für Anfänger
5
Antw.
1524
Views
Regex: Drei gleiche Zeichen/Digits am Zeilenanfang
von sapdepp » 14.10.2024 10:43 • Verfasst in ABAP® Core
5
Antw.
8102
Views
String zerlegen (oder RegEx in ABAP?)
von Margolwes » 19.09.2005 15:06 • Verfasst in ABAP® Core
2
Antw.
1745
Views
Ersetzen von Zeichen
von SAP_ENTWICKLER » 10.12.2018 08:01 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 21 Stunden von Bright4.5 1 / 479
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2124
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8718