Domanda

Sto eseguendo la corrispondenza regex in .NET con stringhe che assomigliano a questo:

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

Devo abbinare la parte URL senza i numeri alla fine, in modo da ottenere questo:

Lists/General Discussion/Waffles Win

Questa è la regex che sto provando:

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

Il problema è che l'ultimo gruppo è stato incluso come parte della partita del gruppo centrale. Ho anche provato senza * alla fine, ma solo la prima stringa sopra corrisponde e non il resto.

Ho l'opzione multi-linea abilitata. Qualche idea?

È stato utile?

Soluzione

Alcune alternative diverse:

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

Corrisponde al minor numero possibile di segmenti di percorso, seguito da un'ultima parte facoltativa e dalla fine della linea.

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

Corrisponde al maggior numero possibile di segmenti di percorso, purché non sia la parte della cifra alla fine della riga.

<*>

Corrisponde al minor numero possibile di caratteri, seguito da un'ultima parte facoltativa e dalla fine della riga.

Altri suggerimenti

Potresti provare

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

e ottieni il 2 ° gruppo. Il primo gruppo corrisponde a 1; # ; il secondo gruppo viene suddiviso nella prima parte o nell'URL (si presume che contenga qualsiasi carattere diverso da /), quindi abbina un numero qualsiasi di gruppi di /, seguito da una non cifra, seguito da qualcosa diverso da /.

Testato su questo sito , sembra fare ciò che desideri. Provalo con qualche altro campione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top