2016-03-23 18 views
5

Mam ciągów wejściowych jak poniżejOdbiór dokładny cyfrowy mecz z ciągiem

1) ISBN_9781338034424_001_S_r1.mp3

2) 001_Ch001_987373737.mp3

3) Jest to próba 001 Chap01.mp3

4) Anger_Cha01_001.mp3

i używam poniżej regex, aby wybrać "001" do grupy numerścieżki

(?:(?<TrackNumber>\d{3})|(?<Revision>r\d{1}))(?![a-zA-Z]) 

Jednak powyższe również podniesienie "978", "133", "803" i itp. Do grupy TrackNumber (przykład 1 i 2).

Jak zmienić powyższe wyrażenie, aby wybrać tylko "001" w polu Numer utworu?

-Alan-

+2

Czy Twój wzór zawiera zawsze z '_'? Może musisz "Split" z tą postacią i wziąć trzeci element? –

+0

Może mieć spacje czasem: –

+0

'(? :(? \ d {3}) _ [AZ] (? r \ d {1})) (?! [A-zA-Z])' –

Odpowiedz

3

Poniższe wyrażenie regularne dopasuje numer utworu 3 cyfry we wszystkich przykładach:

(?<=\b|_)(?<TrackNumber>\d{3})(?=\b|_) 
  • (?<=\b|_) pozytywny lookbehind, że poprzedni znak jest albo granica słowo (tj. spacja) lub podkreślenie
  • (?=\b|_) dodatnia z wyprzedzeniem, że następny znak jest granicą wyrazu (tj. spacją) lub podkreśleniem

Demo

+0

niesamowite rozwiązanie :) –