Używanie funkcji regex w języku C# do dopasowywania i zwracania danych analizowanych z łańcucha zwraca niewiarygodne wyniki.Wzorzec Regex nie pasuje do niektórych tytułów programów.
Wzór używam jest następująco:
Regex r=new Regex(
@"(.*?)S?(\d{1,2})E?(\d{1,2})(.*)|(.*?)S?(\d{1,2})E?(\d{1,2})",
RegexOptions.IgnoreCase
);
Poniżej zamieszczono opis przypadków testowych pary, które nie
Ellen 2015.05.22 Joseph Gordon Levitt [REPOST]
The Soup 2015.05.22 [mp4]
Big Brother UK Live From The House (May 22, 2015)
powinien powrócić
- Pokaż Nazwa (np
Ellen
) - data (np
2015.05.22
) - Dodatkowe informacje (np
Joseph Gordon Levitt [REPOST]
)
Alaskan Bush People S02 Wild Times Special
powinien powrócić
- Pokaż Imię (np
Alaskan Bush People
) - Sezon (np.
02
) - Dodatkowe informacje (np
Wild Times Special
)
500 Questions S01E03
powinien powrócić
- Pokaż nazwy (np
500 Questions
) - Sezon (np
01
) - Odcinek (np.
03
)
Przykłady, które pracują i powrotu odpowiednich danych
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
co wydaje się, że wzór jest ignorowanie S i E, jeżeli nie zostanie znaleziony, a następnie za pomocą pierwszego zestaw pasujących liczb, aby wypełnić to miejsce.
Jest oczywiste, że potrzeba więcej pracy nad tym wzorem, aby pracować z powyższymi zmiennymi łańcuchami. Twoja pomoc w tej sprawie jest bardzo doceniana.
'@" S (\ d {1,2}) PL (. *?)? (\ d {1,2}) (. *) | (. *?) S? (\ d {1,2}) E? (\ d {1,2}) "dlaczego dwa razy napisałeś ten sam wzór? ? –
to nie jest ten sam wzór. zauważ, że jeden kończy się znakiem (. *) dla znaków końcowych, podczas gdy drugi nie. Znalazłem, że jeśli usunę (. *), Ciągi z większą liczbą znaków po numerze odcinka nie zostaną w ogóle złapane. –
to, co mówię, to druga część to podzbiór pierwszej części, w której '. *' Dopasowuje zero znaków ... ?? –