2016-10-06 4 views
1

Ich muss Zeilen schneiden, die 6 oder mehr Zeichen, Bindestrich, dann andere Zeichen oder Symbole haben. Bindestrich und Rest der Zeile sollten entfernt werden. Quellentext:Ausschneiden von Zeilen mit Notepad ++ Regexp ersetzen

0402CS-2 
0402CS-3 
0402 
7812-C 
0603CS-1 
0603CS-2 
0603CS-3 

Als Ergebnis, ich brauche dies:

0402CS 
0402CS 
0402 
7812-C 
0603CS 
0603CS 
0603CS 

, das zu tun, ich benutze Notepad ++ regexp Funktion ersetzen. Muster finden: ^([^ \ -] {6,}) \ -. + $ Muster ersetzen: \ 1 Aber es gibt keine Option "multiline", also Symbole "^" und "$" doesn ‚t Spiel erst am Anfang und Ende der Leitung und tatsächlich habe ich Ergebnis:

0402CS 
0402CS 
0402 
7812 <-- that's wrong! 
0603CS 
0603CS 
0603CS 

Bitte geben Sie mir, wie Muster zu beheben finden? Oder vielleicht gibt es andere Handvoll und leistungsstarken Freitext-Editor, der das tun kann?

Antwort

2

Das passiert, weil die Zeichenklasse auch eine Newline entspricht.

hinzufügen \n es:

^([^\n-]{6,})-.+$ 

the regex online demo Siehe (man beachte den m mehrzeilige Modifikator (Herstellung ^ Spiel der Anfang der Zeile, und $ - das Ende der Linie) und g Modifikator (ermöglicht Suche nach mehrere Vorkommen), die standardmäßig in Notepad ++ aktiviert ist.

Beachten Sie, dass der Bindestrich Flucht innerhalb einer Zeichenklasse nicht notwendig ist, wenn es am Anfang/Ende der Klasse ist, und Sie müssen nie den Bindestrich außerhalb der Zeichenklasse entkommen.

enter image description here

+1

Alles ist in Ordnung, vielen Dank für die Lösung und nützliche Hinweise! – Spark13

3
^([^\n\-]{6,})\-.+$ 

    ^^ 

Nur \n als aufgrund [^-] verwenden die Regex durchqueren kann unter der Leitung als diese Linie verwenden, um ein Spiel zu machen.

Siehe Demo.

https://regex101.com/r/BHO93c/1

für die Eingabe

0402 7812-C die Regex passt beide Linien als 1 Linie und macht eine Übereinstimmung. Siehe Demo, wenn 0402 nicht da ist.

https://regex101.com/r/BHO93c/2