"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

RegEx hilfe benötigt

Rusty83 24.06.2024 - 15:25 1257 12
Posts

Rusty83

Bloody Newbie
Registered: Jun 2024
Location: Austria
Posts: 6
Hallo zusammen!

Ich versuche gerade eine regex zusammenzustellen, dass alles ab dem 2ten Vorkommen eines bestimmten Zeichens abschneidet bzw. findet.

Hier mal Beispiele:

Soll: =ANLAGE+ORTSKENNZEICHEN-12G1-XG1
Ist: =ANLAGE+ORTSKENNZEICHEN-12G1

Soll: =ANLAGE+ORTSKENNZEICHEN-KF1-12XG1
Ist: =ANLAGE+ORTSKENNZEICHEN-KF1

wenn kein zweites "-" vorkommen eben nichts machen
Soll: =ANLAGE+ORTSKENNZEICHEN-12G1
Ist: =ANLAGE+ORTSKENNZEICHEN-12G1

Ich hab schon ziemlich viele Varianten die ich gefunden habe ausprobiert aber leider hat nichts zum Ziel geführt.

Viell. kann mir hier jemand weiterhelfen.

Vielen Dank bereits im Voraus!

Longbow

Here to stay
Avatar
Registered: Feb 2003
Location: Homeoffice
Posts: 5281
die lazy-af lösung wär string split auf "-" und einfach nur die ersten beiden element kombinieren

Rusty83

Bloody Newbie
Registered: Jun 2024
Location: Austria
Posts: 6
Hi Longbow,

hättest du dazu ein Beispiel.

Den besten Ansatz den ich bis jetzt habe ist folgender:
^(?:[^-]*\-){1}([^-]*)

Jedoch wird hier der erste Teil gefunden den ich behalten will d.h. es sollte der Teil gefunden werden der damit übrig bleibt.

meepmeep

Here to stay
Avatar
Registered: Feb 2006
Location: Wien
Posts: 2334
^([^-]*-[^-]*)(.*)$
ANLAGE+ORTSKENNZEICHEN-12G1-XG1
Group 1: "ANLAGE+ORTSKENNZEICHEN-12G1"
Group 2: "-XG1"

könntest du uns infos zur Programmiersprache/Umgebung geben, dann können wir vielleicht noch hilfreicher sein.

Rusty83

Bloody Newbie
Registered: Jun 2024
Location: Austria
Posts: 6
Danke, werde ich morgen gleich testen.

Ist keine bestimmte Programmiersprache.
Reguläre Ausdrücke können in der Software EPLAN verwendet werden und in Ersetzungstabellen genutzt werden - dort wird das benötigt um ein Vollständiges BMK zu "beschneiden"

Smut

takeover & ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16834
regex ist ein sehr guer use-case für LLM ai. vorallem weil man ihn schnell testen kann mit online regex testern. einfach das regex result der ai eingeben und gegen testcases prüfen.

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
chatgpt fragen bzw. erstellen lassen und dann z.b. hier selbst gegenprüfen
https://regex101.com/

Longbow

Here to stay
Avatar
Registered: Feb 2003
Location: Homeoffice
Posts: 5281
Ich hab keine Ahnung von EPLAN, schaut aber so aus als könnte das C#

Insofern bin ich immer noch dafür einfach bei \- zu splitten und dann n benötigte Fragmente wieder aufszummieren. Im Regelfall kommt kein Anlagenbauer daher und beschwert sich, dass ich Umbenennungen gefälligst aber schon in O(n*log(n)*pi*1/sqrt(2))*135 zu lösen habe.

hynk

Super Moderator
like totally ambivalent
Avatar
Registered: Apr 2003
Location: Linz
Posts: 11032
regex101.com zum gegenprüfen macht Sinn.
Für den Schritt davor kann man den hier mal probieren ;)

Rusty83

Bloody Newbie
Registered: Jun 2024
Location: Austria
Posts: 6
@meepmeep: Danke für den Tipp aber, aber leider funktioniert es nicht wie erhofft

@Longbow: ich denke ich weis was du meinst, aber kann es leider nicht umsetzen, hab da zu wenig Erfahrung

@hynk: Super Seite - Danke! Jedoch bekomme ich es damit auch nicht richtig hin.


ist es möglich vom gesamten String den Match zu invertieren damit das nicht gefundene als eigentlicher match übrig bleibt?

Was in der Software noch geht ist folgendes:
Man kann die Abfragen "fortsetzen" viell. wird es damit einfacher?

Jedenfalls mal Vielen Dank für all die Antworten!

meepmeep

Here to stay
Avatar
Registered: Feb 2006
Location: Wien
Posts: 2334
entweder ich habs noch nicht verstanden, oder du musst ein bisschen genauer werden.

der Search/Replace dialog in zB VisualStudio Code entfernt alles hinter dem zweiten "-" bei folgenden Settings
Search: "^([^-]*-[^-]*)(.*)$"
Replace: "$1"

du musst die richtige group referenzieren. group1 enthält alles was du haben willst (denke ich), group2 alles was weg soll.

Rusty83

Bloody Newbie
Registered: Jun 2024
Location: Austria
Posts: 6
in der Software kann ich nur Suchen und das was gefunden wird, wird ersetzt durch entweder nichts oder einen bestimmten Text.
Hier kann ich aber keine Variable oder sonstiges einfügen.

Z.B. mit dem hier:
^(?:[^-]*\-){1}([^-]*)
wird genau das gefunden, was ich eigentlich haben will, in der Software wird aber genau das "ersetzt"/gelöscht, da es gefunden wird mit diesem Ausdruck.

Sorry wenn ich das nicht besser beschreiben kann.

Rusty83

Bloody Newbie
Registered: Jun 2024
Location: Austria
Posts: 6
Hab jetzt eine Lösung für mich gefunden:
Es wird zuerst alles nachdem ersten - extrahiert.
Danach von diesem Teil alles nachdem noch vorkommenden - entfernt (inkl. -).

Somit bleibt der Ausdruck vom ersten - vorhanden.
Dann baue ich alles vor dem ersten - inkl. dem zuvor extrahiertem Ausdruck zusammen.

Etwas umständlich, aber in EPLAN anscheinend nicht anders lösbar.

Danke an alle für ihren input!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz