2016-11-29 3 views
0

Ich muss ein Muster suchen, die von Dokument zu Dokument ändern kann, aber folgt einem bestimmten Muster. Das Muster besteht immer aus 9 Zahlen gefolgt von 3 Buchstaben. Es wird manchmal einen Abstand zwischen ihnen haben und manchmal nicht. Hier ist ein Beispiel von Text durchsuchen:RegEx suchen und ersetzen in Muster

  1. 009244828 FLE
  2. MID021087275
  3. 006386476JJK
  4. 002973303 JJK
  5. MNS 000110924
  6. MNS000110924
  7. 009244828PSC
  8. 001915657SCR

Meine aktuelle Regex sieht so aus: .+?(?=(JJK|FLE|PSC|SCR)). Dies ergibt Zeilen 1,3,4,7 & 8 wie folgt: 1.

  1. 009244828 \ s
  2. 002973303 \ s

, wie es sollte aber nicht wieder die Buchstaben. Ich muss diese Zeilen mit den Buchstaben zurückgeben und den Platz entfernen, wenn es da ist. mein zurückgegebene Ergebnis sollte wie folgt aussehen:

  1. 009244828FLE
  2. 006386476JJK
  3. 002973303JJK
  4. 009244828PSC
  5. 001915657SCR
+0

Sie verwenden können: '^ ([0-9] {9}) (JJK | FLE | PSC | SCR) $' – anubhava

+0

Sie eine positive Vorschau verwenden '='?. Es entspricht einer Gruppe nach dem Hauptausdruck, ohne sie in das Ergebnis aufzunehmen. – Daerik

+1

@anubhava, '^ ([0-9] {9}) \ s (JJK | FLE | PSC | SCR) $' ist genauer mit '\ s?'. – sevavietl

Antwort

0

Lassen Sie uns die regex komponieren Sie suchen Schritt-für- Schritt.

Was Sie brauchen, ist, passen diese:

  • 9 Dezimalstellen \d{9}
  • Ein optionales Leerzeichen \s?
  • 3 GROSSBUCHSTABEN [A-Z]{3} ([a-zA-Z]{3} verwenden, wenn die Buchstaben klein geschrieben werden kann)

Setzen Sie alles zusammen, macht diese Regex fast, was Sie wollen:

\d{9}\s?[A-Z]{3} 

sagte ich „fast“, weil es Sie zwischen den Ziffern des Raumes zu befreien und die Briefe bekommen nicht nachlässt. Um dies zu tun, müssen Sie die Buchstaben und die Ziffern in einfangende Gruppen setzen - danach können Sie einfach die erfassten Teilstrings verketten (mit einem ersetzenden Ausdruck entlang der Linien $1$2 oder \1\2), um genau das zu erhalten, was Sie wollen.

(\d{9})\s?([A-Z]{3}) 

Wenn Sie jede Ziffer-und-Buchstaben-Gruppe in einer eigenen Zeile sicherstellen möchten, ist, einfach wickeln die gesamte Regex in ^ und $, dann ist es in einem Modus ausgeführt werden, wo diese beiden Zeichen den Anfang übereinstimmen/Ende einer Zeile anstelle von Anfang/Ende der gesamten Zeichenfolge.

^(\d{9})\s?([A-Z]{3})$