2017-01-19 2 views
0

Ich bin wirklich nicht vertraut bei Regex und ich kann nicht zum Ausdruck bringen, dass das funktioniert.Finden und ersetzen unbekannte Mitte der Zeichenfolge mit Regex?

Was ich in der Datei haben:

9;01A6DB91;BC994;TRUE 

10;01A6A91A;BC994;FALSE 

112;01A6E1DA;BC994;TRUE 

2000;0196AC26;BC994 
  • Zahl ist eine ganze Zahl vor dem ersten;
  • Dann 8 Zeichen A-z und Zahlen zufällig (MAC-Adresse) dann;
  • Manchmal endet Linie im Format "BC994" manchmal in TRUE, FALSE manchmal in

Wie Ausdruck zu schreiben, bei 112 UNKNOWN 8 Zeichen zu ändern; Linie, mit bekannten 8 Zeichen?

Zum Beispiel:

Suche: 112;??????????

Ersetzen durch: 112;12345678;BC994;

und lassen Sie TRUE oder FALSE, wenn es da ist, wenn nicht, tun Sie es nicht hinzufügen.

Antwort

2

ich tun würde:

  • Ctrl +H
  • Suchen nach: (112;)[a-zA-Z0-9]{8}\b
  • Ersetzen durch: $1NEWCHARS
  • alle ersetzen
Erläuterung

:

(112;)   : Capture group 1 that contains literally 112; 
[a-zA-Z0-9]{8} : 8 characters alpha num 
\b    : word boundary, make sure we have not other letter/digit after 

von Gruppe1 von whatever you want gefolgt ersetzen

+0

Vielen Dank für Ihren Code, aber es funktioniert teilweise, mac-Adressen können nicht immer hexadezimal Buchstaben haben, Mac-Adresse meiner Geräte können Zahlen nur, zum Beispiel 01912345, und wenn ich mit $ 101912345 von 112 ersetze; 01A7C159; BC991 es lässt mich nur mit dieser; BC991 im verlieren ganze reihe Wenn ich 01A12345 benutze es zeigt mir A12345; BC991 was nicht gut ist aber Schließen – Orion310591

+0

Wenn Sie versuchen, es durch '($ 1) NEWCHARS' ersetzen, sollte es Arbeit. – TaoStyle

+0

@TaoStyle Ja, es funktioniert, aber ich fand einen anderen "Bug" Ich habe in der Datei 3; MAC_ADRESS und 13; MAC_ADRESS UND 113; MAC_ADRESS, wenn mein Ziel ist, Mac-Adresse nur auf 3 zu ändern; können wir ändern Code ** nicht **, um andere Zahlen teilweise zu akzeptieren Zustand, wenn ich versehentlich alle ersetzen, und ich sehe es nicht, ich werde ein Durcheinander machen, werde ich Adressen von mehreren Geräten verlieren. Regex sollte sowas wie^für "line start with" haben? Kann ich das irgendwie auf eine einzige Zeile fixieren? – Orion310591

Verwandte Themen