Pergunta

Estou efectuar a correspondência regex em .NET contra cordas que olhar como esta:

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

Eu preciso para coincidir com a parte de URL sem os números no final, de modo que fico com esta:

Lists/General Discussion/Waffles Win

Esta é a regex Eu estou tentando:

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

O problema é que o último grupo está sendo incluído como parte do jogo do grupo do meio. Eu também tentei sem o * no final, mas, em seguida, apenas a primeira seqüência acima jogos e não o resto.

Eu tenho a opção multi-linha habilitada. Alguma idéia?

Foi útil?

Solução

Algumas alternativas diferentes:

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

Este partidas como alguns segmentos de caminho possível, seguido por uma última parte opcional, e o fim da linha.

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

A partidas como muitos segmentos de caminho quanto possível, desde que ele não é a parte de dígitos no fim da linha.

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

Este partidas como alguns caracteres possível, seguido por uma última parte opcional, e o fim da linha.

Outras dicas

Você poderia tentar

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

e obter o 2º grupo. O primeiro grupo coincide com o 1;#; o segundo grupo é dividido na primeira parte ou a URL (supostos conter qualquer carácter diferente de /), então corresponde a qualquer número de grupos de /, seguido por um não-dígitos, seguidos por outra coisa senão /.

neste site , parece fazer o que quiser. Experimentá-lo com mais algumas amostras.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top