2016-07-28 4 views
0

Ich muss danach die 2 Zeichen Buchstaben und Zahlen greifen:umkehren über regex oder Grabbing letzten Spiel ohne Schwanz Lesen

Was ich will, ist:

AB 12 CD-12345-67 -> CD-12345 
AB12 CD 12345-67 -> CD 12345 
AB-12CD12345-6 -> CD12345 
ABC1234556 -> no match, as I look for 2 character letter and numbers after that. 
ABC-1234556 -> no match, as I look for 2 character letter and numbers after that. 
A1-BC-12D345-56 -> no match, after 2 characters letter, numbers must come 

ich diese Regex verwendet

[A-Z]{2}[ |\-]?\d+ 

Welche packt CD-12345 und AB 12, im ersten Beispiel. Ich brauche nur CD-12345. Auch ergreift es BC1234556, BC-1234556, BC-12 in den letzten drei Beispielen, die ich nicht will. Manchmal Leerzeichen, kein Leerzeichen oder - Zeichen zwischen Zahlen und Buchstaben blockieren.

Vielen Dank.

+1

Try [ '[AZ] {2} [(<[AZ]?!) -?] [0-9] {3,6 } '] (https://regex101.com/r/sY8zY3/1) –

+0

Verwenden Sie es in JavaScript (Sie erwähnten, dass Sie eine Regexr-Website zum Testen der Regex verwenden)? Sie sollten der Frage das relevante Tag hinzufügen. Verwenden Sie in JS ['(^ | [^ AZ]) ([AZ] {2} [-]? [0-9] {3,6})'] (https://regex101.com/r/sY8zY3/3) und verwende den Wert der Gruppe 2. –

Antwort

0

auf, was Sie

posted
^.*(?<![A-Z])([A-Z]{2}[- ]?\d++)(?![A-Z]) 

Demo

0

Wenn einer Ihrer Matches würde einen Schwanz wie -... haben, könnten Sie verwenden diese

[A-Z]{2}[- ]?\d{1,6}(?=-)\b 

- braucht nicht entgangen zu sein, und es gibt keine Notwendigkeit | innerhalb [...] haben . Wortgrenzen (\b) schließen solche unerwünschten Übereinstimmungen als viertes und fünftes aus. wird übereinstimmen, wenn es von 1 bis 6 Ziffern gibt.

+0

Dank Ihrer Antwort können Zahlen von 1 bis 6 Ziffern sein, und auch zwischen Zahlen und Buchstaben existieren manchmal kein Leerzeichen, Leerzeichen oder - Zeichen. – faust

+0

@faust Meinst du, dass es einen Platz nach oder vor '-' geben könnte? Ist es nur ein Leerzeichen oder mehrere? – nicael

+0

@faust Soll es auch immer 5 Ziffern geben, oder ist es egal? – nicael