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 / 1795 / 213 / 396 ) »
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 / 3943 / 105 / 886 ) »
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 / 3943 / 105 / 886 ) »
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 / 3943 / 105 / 886 ) »
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.
980
Views
Letzte String Zeichen ersetzen
von ichse18577 » 13.11.2019 14:02 • Verfasst in ABAP® für Anfänger
2
Antw.
362
Views
Regex in FIND erste Zeichen prüfen.
von msfox » 02.10.2023 11:27 • Verfasst in ABAP® für Anfänger
5
Antw.
7783
Views
String zerlegen (oder RegEx in ABAP?)
von Margolwes » 19.09.2005 15:06 • Verfasst in ABAP® Core
2
Antw.
1367
Views
Ersetzen von Zeichen
von SAP_ENTWICKLER » 10.12.2018 08:01 • Verfasst in ABAP® Core
3
Antw.
4010
Views
Nichtdruckbare Zeichen ersetzen
von asdfjklö » 01.07.2008 13:21 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 255

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.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 255

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140