Frage

Ich führe Regex Matching in .NET gegen Strings, die wie folgt aussehen:

1;#Lists/General Discussion/Waffles Win
2;#Lists/General Discussion/Waffles Win/2_.000
3;#Lists/General Discussion/Waffles Win/3_.000

ich brauche, ohne dass die Zahlen am Ende den URL-Abschnitt entsprechen, so dass ich dies:

Lists/General Discussion/Waffles Win

Dies ist die regex Ich versuche:

(?:\d+;#)(?<url>.+)(?:/\d+_.\d+)*

Das Problem ist, dass die letzte Gruppe als Teil der mittleren Gruppe Begegnung einbezogen wird. Ich habe auch ohne die * am Ende versucht, aber dann nur die erste Saite über Spiele und nicht um den Rest.

Ich habe die Mehrzeilen-Option aktiviert ist. Irgendwelche Ideen?

War es hilfreich?

Lösung

Ein paar verschiedenen Alternativen:

@"^\d+;#([^/]+(?:/[^/]+)*?)(?:/\d+_\.\d+)?$"

Das paßt so wenige Pfadsegmente wie möglich, von einem optionalen letzten Teil gefolgt, und das Ende der Zeile.

@"^\d+;#([^/]+(?:/(?!\d+_\.\d+$)[^/]+)*)"

Das paßt so viele Pfadsegmente wie möglich, solange es nicht der Ziffer-Teil am Ende der Leitung ist.

@"^\d+;#(.*?)(?:/\d+_\.\d+)?$"

Das paßt so wenige Zeichen wie möglich, von einem optionalen letzten Teil gefolgt, und das Ende der Zeile.

Andere Tipps

Sie könnten versuchen,

^(\d+;#)([^/]+(/[^\d][^/]*)*)

und die zweite Gruppe bekommen. Die erste Gruppe entspricht den 1;#; Die zweite Gruppe wird in den ersten Teil der URL oder gespalten (vorausgesetzt alle Zeichen außer / enthalten), dann wird eine beliebige Anzahl von Gruppen von / entsprechen, durch eine nicht-digit, gefolgt von etwas anderem als /.

Getestet auf dieser Seite scheint zu tun, was Sie wollen. Versuchen Sie es einmal mit etwas mehr Proben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top