AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein RegEx - String zwischen bestimmten Zeichen ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

RegEx - String zwischen bestimmten Zeichen ermitteln

Ein Thema von static_cast · begonnen am 8. Okt 2005 · letzter Beitrag vom 8. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#1

RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 13:43
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
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#2

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 14:32
[^<>]*


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

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#3

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 15:33
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>
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#4

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 15:40
dein (.*) zwischen den <a></a> muss so aussehen:

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

jetzt verstanden?
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 15:48
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#6

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 15:58
@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.
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#7

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 16:07
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.
Christoph
  Mit Zitat antworten Zitat
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#8

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 16:13
Eigentlich alles wie ich es schon schrieb...

http://raw.as/regex.jpg
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#9

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 16:15
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#10

Re: RegEx - String zwischen bestimmten Zeichen ermitteln

  Alt 8. Okt 2005, 16:21
Hi David,

öhm wie finde ich das herraus? Aber ich hab im Regex Coach mal selection 2 gewählt (siehe neues Bild oben).
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 Uhr.
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