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 - String zwischen bestimmten Zeichen ermitteln (https://www.delphipraxis.net/54632-regex-string-zwischen-bestimmten-zeichen-ermitteln.html)

static_cast 8. Okt 2005 14:43


RegEx - String zwischen bestimmten Zeichen ermitteln
 
Hoi,

ich habe mich gerade etwas mit RegEx befasst da es mir für meinen Zweck sinnvoller erschien als mit Pos und PosEx zu arbeiten, nunja jetzt komme ich aber nicht weiter und hoffe auf Hilfe :)

Und zwar:

suche ich nach einem Link mit diesem Aufbau: Link Caption

um den zu finden habe ich mir diesen Regex gebaut: (?i)<a(\s*)name(\s*)=(\s*)['|"](\d*)['|"](\s*)href(\s*)=(\s*)['|"](.*)['|"](\s*)>(.*)</a> soweit tut es das auch wie ich gern hätte.

Jetzt möchte ich aber aus dem gefundenem Link die Nummer (name) und die Caption bekommen, dafür habe ich mir diese hier gebaut:

Nummer: ['|"](\d*)['|"]
Caption: (?i)(\s*)>(.*)</a>

da ist jetzt mein Problem das ich die Ueichen dazwischen möchte aber er gibt mir bei der Nummer '123456' zurück und bei der Caption >Link Caption</a>, meine Frage wie bekomme ich nur die Zeichen dazwischen?

Grüße
Daniel

ripper8472 8. Okt 2005 15:32

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
[^<>]*


"foo123"
(.*)([0-9]+) ist "greedy"
(.*?)([0-9]+) ist "ungreedy"
man beachte das ? nach dem quantifier

static_cast 8. Okt 2005 16:33

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
Hi Christoph,

irgendwie funktioniert das nicht... oder ich bin zu doof dazu :-/
Hab es mit dem Regex Coach getestet aber er matched nur wirres zeuchs?!


Achja ich hab da noch was, bei diesem RegEx (?is)<a(\s*)name(\s*)=(\s*)['|"](\d*)['|"](\s*)href(\s*)=(\s*)['|"](.*)['|"](\s*)>(.*)</a> matched er alles zusammen (Rot und Blau) ich möchte aber gerne nur das Rote kann ich ihm irgendwie beibringen er soll nach dem ersten </a> schon aufhören mit suchen?

Zitat:

<tr class='class0' height='10'>
<td align='right' valign='middle'></td>
<td width='200' nowrap>Link Caption</td>
<td>wert 1</td>
<td>wert 2</td>
<td>wert 3</td>
<td colspan='3' align='right'>alles nach wert 3 ignorieren</td>
</tr>
<tr class='class1' height='10'>
<td align='right' valign='middle'></td>
<td width='200' nowrap>Link Caption</td>
<td>wert 1</td>
<td>wert 2</td>
<td>wert 3</td>
<td colspan='3' align='right'>alles nach wert 3 ignorieren</td>
</tr>
<tr class='class2' height='10'>
<td align='right' valign='middle'></td>
<td width='200' nowrap>Link Caption
</td>
<td>wert 1</td>
<td>wert 2</td>
<td>wert 3</td>
<td colspan='3' align='right'>alles nach wert 3 ignorieren</td>
</tr>

ripper8472 8. Okt 2005 16:40

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
dein (.*) zwischen den <a></a> muss so aussehen:

([^<>]*)
oder
(.*?)

jetzt verstanden?

Bernhard Geyer 8. Okt 2005 16:48

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
Hast Du die Links im Rahmen einer HTML-Datei?

Falls ja so lass doch den IE (TWebBrowser) die Arbeite erledigen. In TWebBrowser laden, über das DOM (IHtmlDocument2) die Link-Liste geben lassen und diese Auswerten. Siehe Beispiel auf Delphi About

static_cast 8. Okt 2005 16:58

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
@Christoph

okay also "(?i)(\s*)>([^<>]*)</a>" liefert ">Link Caption</a>", daher verstehe ich es immer noch nicht?! ich würde gerne nur "Link Caption" bekommen.

@Bernhard

das ist zwar eine Idee aber da ich mit dieser Methode wie ich es jetzt vor habe gleich andere Links oder der gleichen ausschließen kann ist das denke ich mal besser für mein Vorhaben geeignet.



Generell brauche ich als erstes den <tr></tr> Block (diesen bekomme ich über (?i)<tr(.*)class(\s*)=(\s*)['|"]class(\d{1,})['|"](.*)> wobei ich da das selbe problem habe wie oben mit dem Rot und Blau wenn ich den singeline Flag setze) dann den Link und von diesem dann den Wert von name und die Caption und notfalls die anderen Informationen aus den Spalten.

ripper8472 8. Okt 2005 17:07

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
Zitat:

Zitat von static_cast
@Christoph

okay also "(?i)(\s*)>([^<>]*)</a>" liefert ">Link Caption</a>", daher verstehe ich es immer noch nicht?! ich würde gerne nur "Link Caption" bekommen.

komplettes regex und testdaten bitte.
du scheinst einen fehler drin zu haben, weil das dieses einzelne muster (weils in klammen ist) das </a> nicht erfassen sollte. wie es aussieht, nimmst du den text ab nach dem ersten pattern, statt den text des zweiten patterns...
das regex schon ist richtig, deine programmlogik macht nen fehler.

static_cast 8. Okt 2005 17:13

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
Eigentlich alles wie ich es schon schrieb...

http://raw.as/regex.jpg

mirage228 8. Okt 2005 17:15

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
Hi,

was für eine RegEx Implementierung benutzt Du? Ggf. ist das Ergebnis in Gruppen unterteilt, wie z.B. ">", "Link Caption" und "</a>".
Eventuell kannst Du auch (?:>) und (?:</a>) benutzen, dann wird das Ergebnis nicht mit den in den Match genommen.

mfG
mirage228

static_cast 8. Okt 2005 17:21

Re: RegEx - String zwischen bestimmten Zeichen ermitteln
 
Hi David,

öhm wie finde ich das herraus? Aber ich hab im Regex Coach mal selection 2 gewählt (siehe neues Bild oben).


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz