L'uso di repressione in C# per abbinare e restituire dati analizzati da una stringa restituisce risultati inaffidabili.Il pattern Regex non corrisponde a determinati titoli di show
Il modello che sto usando è la seguente:
Regex r=new Regex(
@"(.*?)S?(\d{1,2})E?(\d{1,2})(.*)|(.*?)S?(\d{1,2})E?(\d{1,2})",
RegexOptions.IgnoreCase
);
seguito sono un caso paio di test che falliscono
Ellen 2015.05.22 Joseph Gordon Levitt [REPOST]
The Soup 2015.05.22 [mp4]
Big Brother UK Live From The House (May 22, 2015)
dovrebbe tornare
- Mostra nome (ad esempio,
Ellen
) - Data (ad esempio,
2015.05.22
) - Extra Info (per esempio,
Joseph Gordon Levitt [REPOST]
)
Alaskan Bush People S02 Wild Times Special
dovrebbe tornare
- Mostra nome (ad esempio,
Alaskan Bush People
) - Stagione (ad esempio,
02
) - Extra Info (per esempio,
Wild Times Special
)
500 Questions S01E03
dovrebbe tornare
- Mostra nome (ad esempio,
500 Questions
) - Stagione (ad esempio,
01
) - Episodio (ad esempio,
03
)
esempi che funzionano e restituiscono dati corretti
Boyster S01E13 – E14
Mysteries at the Museum S08E08
Mysteries at the National Parks S01E07 – E08
The Last Days Of… S01E06
Born Naughty? S01E02
Have I Got News For You S49E07
Che sembra, è che il modello sta ignorando la S e la E se non lo trova, e quindi utilizzando il primo set di numeri corrispondenti per riempire lo slot.
È chiaro che è necessario più lavoro su questo modello per lavorare con le stringhe di cui sopra. La tua assistenza in questa materia è molto apprezzata.
'@" S (\ d {1,2}) E (*.?)? (\ d {1,2}) (. *) | (. *?) S? (\ d {1,2}) E? (\ d {1,2}) "' perché hai scritto lo stesso schema due volte ? –
non è lo stesso modello. si noti che uno finisce con (. *) per ogni carattere finale, mentre l'altro no. Ho scoperto che se ho rimosso il (. *), Le stringhe con più caratteri dopo il numero dell'episodio non venivano catturate affatto. –
quello che sto dicendo è che la seconda parte è un sottoinsieme della prima parte dove '. *' Corrisponde a zero caratteri .. ?? –