Laden...

RegEx hört nicht beim ersten Vorkommen auf bei look-around

Erstellt von masterchris_99 vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.485 Views
M
masterchris_99 Themenstarter:in
89 Beiträge seit 2006
vor 13 Jahren
RegEx hört nicht beim ersten Vorkommen auf bei look-around

Hallo,

ich probiere etwas mit RegEx auszulesen nur ist es immer so das ich probiere etwas auszulesen was von 2 "tags" umschlossen ist. Nun nimmt mein Regex aber nie das erste Vorkommen sondern immer das letzte...

Source:
<span class="contact">Fax:</span></td><td colspan="2">:::

Regex myRegex = new Regex("(?<=Fax:</span></td><td colspan=\"2\">).*(?=</td>)");
myMatch = myRegex.Match(myString);
string result = myMatch.Value;

mein myMatch.Value geht dann aber bis zum letzten </td> was es finden kann.

was mache ich hier falsch?

mfg Chris

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo masterchris_99,

ich würde das nicht über look-arounds machen, sondern die Tags ganz normal in den Pattern aufnehmen, den Teil, der dich interessiert, in Klammern einschließen und zum Schluss die entsprechende Gruppe auslesen.

Dann hast du die look-arounds frei, um das eigentliche Problem zu lösen (mit einem negativen look-ahead). Siehe RegEx kürzester Match [und die Gefahren von .*?].

herbivore

M
masterchris_99 Themenstarter:in
89 Beiträge seit 2006
vor 13 Jahren

wenn ich jetzt folgendes RegEx nehme

Regex myRegex = new Regex("Fax:</span></td><td colspan=\"2\">[^<]*</td>");

Dann habe ich aber das Problem das ich die Tags die das was ich Suche umschließen im Result mit drin sind. Ich finde jetzt das was ich oben rot & grün markiert habe. Und genau das wollte ich ja mit den Look-Arounds vermeiden.

Ich gehe aber mal aus das mein RegEx noch falsch ist, oder?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo masterchris_99,

Dann habe ich aber das Problem das ich die Tags die das was ich Suche umschließen im Result mit drin sind.

deshalb schrieb ich ja:

den Teil, der dich interessiert, in Klammern einschließen und zum Schluss die entsprechende Gruppe auslesen.

Ich gehe aber mal aus das mein RegEx noch falsch ist, oder?

Zumindest benutzt er keine negativen look-aheads wie vorgeschlagen. Ansonsten liefert er für dein Beispiel schon das richtige Ergebnis (wenn du noch Klammern setzt und die entsprechende Gruppe ausliest).

herbivore

M
masterchris_99 Themenstarter:in
89 Beiträge seit 2006
vor 13 Jahren

ahhhhh

Ich hatte es vorhin schon mit Klammern eingeschlossen aber der Value hat sich nicht geändert.

myMatch.Groups[1].Value
ist jetzt genau das was ich gesucht habe!

Danke