Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RegEx-Ausdruck gesucht (https://www.delphipraxis.net/55282-regex-ausdruck-gesucht.html)

Bernhard Geyer 19. Okt 2005 07:17


RegEx-Ausdruck gesucht
 
Ich habe Texte die folgendes Aussehen haben könnten:

1234567

bzw.

4545454_1234567_Text

Jetzt würde ich einen RegEx-Ausdruck benötigen der beide Fälle abdeckt und mir jeweils den Text/Zahl "1234567" liefert. :gruebel:
Da ich in RegEx noch nicht alle Feinheiten kenne bin ich etwas überfordert.

opfer.der.genauigkeit 19. Okt 2005 07:42

Re: RegEx-Ausdruck gesucht
 
Zitat:

Da ich in RegEx noch nicht alle Feinheiten kenne bin ich etwas überfordert.
Noch nicht in allen seinen Feinheiten?
Ich würd sagen.. garnicht :zwinker:

RegEx

Daniel 19. Okt 2005 07:55

Re: RegEx-Ausdruck gesucht
 
Kannst Du diesen regulären Ausdruck mal weiter erklären?

Können pauschal alle Zeichen vor und nach dem Unterstrich weggeworfen werden? Befinden sich davor wirklich nur Ziffern und danach nur Buchstaben? Wie ist das zugrundeliegende Alphabet definiert: Nur "normale Buchstaben" oder auch Sonderzeichen? Besteht die Zeichenkette, die Du haben willst tatsächlich stets nur aus Ziffern?

Solche Fragen sind für die Generierung des Ausdruckes hilfreich.

Bernhard Geyer 19. Okt 2005 08:16

Re: RegEx-Ausdruck gesucht
 
Zitat:

Zitat von opfer.der.genauigkeit
Noch nicht in allen seinen Feinheiten?
Ich würd sagen.. garnicht :zwinker:

Stimmt nicht.
Wenn ich mit der RegEx (\d*)_(\d*) bekomm ich als zweite Gruppe für das zweite Beispiel den gewünschten Text

Zitat:

Zitat von Daniel
Kannst Du diesen regulären Ausdruck mal weiter erklären?

Können pauschal alle Zeichen vor und nach dem Unterstrich weggeworfen werden? Befinden sich davor wirklich nur Ziffern und danach nur Buchstaben? Wie ist das zugrundeliegende Alphabet definiert: Nur "normale Buchstaben" oder auch Sonderzeichen? Besteht die Zeichenkette, die Du haben willst tatsächlich stets nur aus Ziffern?

Solche Fragen sind für die Generierung des Ausdruckes hilfreich.


Es gibt zwei Fälle:

Fall 1: Es ist nur eine Zahl (1234567) ohne Text davor oder danach.

Fall 2: Es ist erst eine Zahl (4545454), anschließend immer ein Unterscore (_), danach wieder eine Zahl (1234567). Teilweise kann jetzt eine Bindestich (-) mit einer weiteren Zahl kommen (hab ich gerade erst gesehen). Anschließend ein Unterscore (_) und ein beliebiger Text.

Benötigt wird

Fall 1: Die komplette Zahl

Fall 2: Die Zahl nach dem ersten Unterscore und der teilweise vorhandene Bindestrich mit der 2ten Zahl.

mirage228 19. Okt 2005 08:45

Re: RegEx-Ausdruck gesucht
 
Hi,

also ich habe das ausprobiert und es ging, probiere es mal aus :)
Edit: Die einzelnen Teile müsstest Du dann mit den einzelnen CaptureGroups herausbekommen

Code:
(\d+)(\_(\d+)(\-(\d+)|)|)
mfG
mirage228

Bernhard Geyer 19. Okt 2005 09:06

Re: RegEx-Ausdruck gesucht
 
Nicht ganz. Jedenfalls nicht mit dem gleichen Index der Capture-Group.

Beim Fall 2 muß ich den Index 3 bemühen und beim Fall 1 ist es der Index 1.

Ich verwende übrigens TRexExpr mit Delphi.
Aber beim Online-Test kommt das gleiche raus.

Evtl. muß ich ja in meinem Programm einen "primären" Index definieren und falls da nichts raus kommt soll der alternative Index geprüft werden. Müßte zwar das Programm zwar etwas erweitern, aber falls es mit Rexex nicht über den gleichen Index geht.

mirage228 19. Okt 2005 09:18

Re: RegEx-Ausdruck gesucht
 
Hi,

Da musst Du eine Fallunterscheidung machen, das stimmt.

Wenn Index 3 bei den Gruppen nicht gesetzt ist (bzw. = '' ist), musst Du dann einfach von Fall I ausgehen.
Eine andere Möglichkeit sehe ich da jetzt auch nicht...

mfG
mirage228

Flocke 19. Okt 2005 09:35

Re: RegEx-Ausdruck gesucht
 
Vielleicht so:
Code:
^(\d+_)?(\d+)[^0-9]*$
Dann ist's immer in der 2. Gruppe.

Bernhard Geyer 19. Okt 2005 09:48

Re: RegEx-Ausdruck gesucht
 
Zitat:

Zitat von Flocke
Vielleicht so:
Code:
^(\d+_)?(\d+)[^0-9]*$
Dann ist's immer in der 2. Gruppe.

Super :thumb:

Jetzt bräuchte ich noch die Erweiterung das folgender Fall auch geht

4545454_1234567-1_Text

und als Ergebnis

1234567-1

gefunden wird. Sprich nach der Zahl mittels Bindestrich auch noch eine "Extension-Zahl" gefunden wird.

Flocke 19. Okt 2005 10:07

Re: RegEx-Ausdruck gesucht
 
So?
Code:
^(\d+_)?(\d+(-\d+)?)[^0-9]*$


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