Question

J'effectue une correspondance d'expression régulière dans .NET avec des chaînes ressemblant à ceci:

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

Je dois faire correspondre la partie de l'URL sans les chiffres à la fin, afin d'obtenir le résultat suivant:

Lists/General Discussion/Waffles Win

C’est la regex que j’essaie:

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

Le problème est que le dernier groupe est inclus dans la correspondance du groupe intermédiaire. J'ai aussi essayé sans * à la fin, mais seulement la première chaîne au-dessus correspond et pas le reste.

L'option multiligne est activée. Des idées?

Était-ce utile?

La solution

Quelques alternatives différentes:

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

Ceci correspond au moins de segments de chemin possible, suivi d'une dernière partie facultative et de la fin de la ligne.

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

Ceci correspond à autant de segments de chemin que possible, à condition qu'il ne s'agisse pas de la partie chiffre située à la fin de la ligne.

<*>

Ceci correspond au moins de caractères possible, suivi d'une dernière partie facultative et de la fin de la ligne.

Autres conseils

Vous pouvez essayer

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

et obtenez le 2e groupe. Le premier groupe correspond au 1; # ; le deuxième groupe est divisé en une première partie ou en une URL (supposée contenir un caractère autre que /), puis correspond à un nombre quelconque de groupes de /, suivi d'un caractère non numérique suivi d'un autre caractère que /.

Testé sur le ce site , semble faire ce que vous voulez. Essayez-le avec quelques échantillons supplémentaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top