2016-03-23 4 views
5

ich die Eingabezeichenfolgen wie untenWählen Sie die genaue Ziffer Spiel aus einem String

1) ISBN_9781338034424_001_S_r1.mp3

2) 001_Ch001_987373737.mp3

3) Dies ist Test 001 Chap01.mp3

4) Anger_Cha01_001.mp3

und ich bin mit regex unten "001" in Tracknumber Gruppe holen

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

Aber die oben genannten auch die "978", "133", "803" und etc in TrackNumber Gruppe (Beispiel 1 und 2).

Wie ändere ich den obigen Regex, um nur die "001" in TrackNumber auszuwählen?

-Alan-

+2

Ist Ihr Muster enthält immer mit '_'? Vielleicht musst du mit diesem Charakter "teilen" und das dritte Element davon nehmen? –

+0

Es kann manchmal Leerzeichen haben –

+0

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

Antwort

3

Der folgende reguläre Ausdruck wird die 3-stellige Titelnummer in allen Beispielen entspricht:

(?<=\b|_)(?<TrackNumber>\d{3})(?=\b|_) 
  • (?<=\b|_) positive Lookbehind, dass das vorherige Zeichen entweder eine Wortgrenze (dh ein Leerzeichen) oder ein Unterstrich
  • (?=\b|_) positive Vorausschau, dass das nächste Zeichen entweder eine Wortgrenze (dh ein Leerzeichen) oder ein Unterstrich
  • ist

Demo

+0

genial Lösung :) –

Verwandte Themen