Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Frage zu RegEx-Formel (https://www.delphipraxis.net/209270-frage-zu-regex-formel.html)

Harry Stahl 16. Nov 2021 19:18

Frage zu RegEx-Formel
 
Ich beschäftige mich jetzt (seltsamerweise) zum ersten mal mit RegEX. Ich denke richtig benutzt könnte es mir die Arbeit beim Suchen nach oder Extrahieren von Text sehr hilfreich sein.

Nun gibt es leider so viele Möglichkeiten und Paramenter, dass ich da nicht so recht weiß, wie ich anfangen soll. Habe schon mal das Video von Bernd zum RegEx gesehen und mal ein wenig auf der regex101.com rumprobiert, nur leider will es nicht gelingen.

Ich möchte einen Text Zeilenweise durchgehen und da den Text, der am Anfang in Klammern steht extrahieren und auch den nachfolgenden Text, der in Hochkommata steht. Ein Beispiel:

DEr zu durchsuchende Text lautet:

"
urposes of their operation, use, protection and maintenance;
(2) ‘security of network and information systems’ means the ability of network and information systems to
"

Ich will hier also letztlich den Titel der Definition "security of network and information systems" rausfiltern, inclusive der vorangestellten Nummer (2).

Will also als Rückgabe haben:

(2) ‘security of network and information systems’

Kann mir jemand mal zum Einstieg die Lösung sagen, das würde mir sehr helfen und dann als Basis für mögliche Abwandlungen dienen können...

Klaus01 16. Nov 2021 21:00

AW: Frage zu RegEx-Formel
 
Code:
\(\d\) [‘][a-zA-Z0-9\x20]+[’]
sollte so funktionieren - getestet mit https://regex101.com/

Grüße
Klaus

Harry Stahl 16. Nov 2021 22:09

AW: Frage zu RegEx-Formel
 
Zitat:

Zitat von Klaus01 (Beitrag 1497690)
Code:
\(\d\) [‘][a-zA-Z0-9\x20]+[’]
sollte so funktionieren - getestet mit https://regex101.com/

Grüße
Klaus

Super funktioniert!

Demnach bedeutet: \(\d\) jedes Zeichen innerhalb der Klammern (warum steht vor den Klammern ein "\"?)
['] = Erfassung des Hochzeichens (am Anfang?)

[a-zA-Z0-9] = Alle Buchstaben und Zahlen. Wenn allerdings ein deutscher Umlaut im Text vorhanden ist, wird nichts gefunden. Muss also noch "üäöÄÖÜ" dazunehmen (auch ein $, § etc, wenn so was vorkommt. ein \d\ scheint damit nicht zu gehen

Wofür steht \x20 ? Dazu habe ich leider in der Doku nichts gefunden...

Aber echt cool. Ich glaube, wenn man das beherrscht wird man schnell Weltmeister im parsen...

Uwe Raabe 16. Nov 2021 23:30

AW: Frage zu RegEx-Formel
 
Ich empfehle dir da den RegexBuddy. Der Preis ist überschaubar und man erspart sich langes Suchen und Probieren.

Harry Stahl 17. Nov 2021 00:05

AW: Frage zu RegEx-Formel
 
Danke Uwe, werde ich mir mal ansehen.:thumb:

Das obige Beispiel habe ich noch etwas verbessern können, so dass nun auch (10) oder (1a) oder (18b) oder auch zwei Leerzeichen zwischen dem Text erkannt werden:

\(d*.+\) +[‘][a-zA-Z0-9\x20]+[’]

Klaus01 17. Nov 2021 06:12

AW: Frage zu RegEx-Formel
 
Hallo Uwe,

der Backshlash wurd zum Escapen benutzt - d.h in der Regel folgt dort ein Zeichen das anders interpretiert werden soll.

\x20 bildet ein Leerzeiche ab. Onne dem \x20 würde nur das erste Wort gefunden werden.
\d steht für eine einzelne Zahl (digit)
\d+ dann muss dort ein oder mehrere digits vorhanden sein
Der Punkt bildet irgendein Zeichen ab.

Grüße
Klaus

IMPEGA 17. Nov 2021 08:30

AW: Frage zu RegEx-Formel
 
Anfängerfrage.
Falls immer gleiche Muster gesucht wird, reicht es nicht so: (\(\d+\).*?)’

Klaus01 17. Nov 2021 09:44

AW: Frage zu RegEx-Formel
 
in der Tat - die Welt kann so einfach sein :o)

Code:
(\(\d+\s*\S*\).*?)’
findet auch (2abc) ... oder (2 abc) ...

Grüße
Klaus

Harry Stahl 18. Nov 2021 22:56

AW: Frage zu RegEx-Formel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, super, vielen Dank, funktioniert perfekt.

Falls von Interesse, wofür ich das gebraucht und letztlich verwendet habe, dann kann man sich das hier ansehen:

Exakte Stelle : https://youtu.be/JOBXRD5twWY?t=135
oder
das ganze Video (8 Min): https://youtu.be/JOBXRD5twWY
um den Kontext besser zu verstehen.

Was mir nicht gelungen war, ist einen Text auszuschließen, hätte gedacht es würde mit "(?!Absatz)" funktionieren, um das Wort "Absatz" auszuschließen (siehe auch anliegenden Screenshot).
Was mache ich da falsch?

Klaus01 19. Nov 2021 17:20

AW: Frage zu RegEx-Formel
 
Liste der Anhänge anzeigen (Anzahl: 1)
.. Du köntest es mal so versuchen

Code:
(^§.*\d*.*)Absatz(.*)|(^§.*\d*\s*)
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Seite 1 von 2  1 2      

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