Ignorando un suffisso opzionale con una regex avida
-
07-07-2019 - |
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?
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.