Wie die Saiten (4000 bis 4200) ersetzen (5000-5200) in vim ..Regulärer Ausdruck in vim
Antwort
Eine andere Möglichkeit:
:%s/\v<4([01]\d{2}|200)>/5\1/g
Dies tut man 200 als gut, und es leidet nicht unter dem „schiefen Zahnstocher-Syndrom“ zu viel, da es die \v switch verwendet.
EDIT # 1: Hinzugefügt Wortgrenze Anker ('<'
und '>'
) zu verhindern "14100"
ersetzen usw.
EDIT # 2: Es gibt Fälle, in denen eine "Wortgrenze" nicht genug ist, um richtig die Erfassung gewünschtes Muster. Wenn Leerraum der Begrenzungsfaktor sein soll, wird der Ausdruck etwas komplexer.
:%s/\v(^|\s)@<=4([01]\d{2}|200)(\s|$)@=/5\1/g
wo "(^|\s)@<=
" ist der Blick hinter Behauptung für "Start-of-line" oder "\s
" und "(\s|$)@=
" ist der Look-Ahead für "End-of-line" oder "\s
" .
:%s/\<4\([01][0-9][0-9]\)\>/5\1/g
wird außer 4200 für alle arbeiten –
Gibt es eine Einstellung, so kann man eingeben : s/<4 (\\ [01] [0-9] [0-9])>/\ 5 \ 1/g – jskulski
:%s/\<4\([0-1][0-9][0-9]\)\>/5\1/g
4000 bis 4199. tun Sie müssen tun würden dann 4200/5200 getrennt.
Eine kurze Erklärung. Das obige findet 4, gefolgt von 0 oder 1, gefolgt von zweimal 0-9. Die 0-1,0-9,0-9 werden in eine Gruppe eingeschlossen, und die Ersetzung (folgend auf den Schrägstrich) sagt Ersetzen durch 5 gefolgt von der letzten übereinstimmenden Gruppe (\ 1, d.h. das Bit, das der 4 folgt).
\ < und> sind die Wortgrenzen, um Übereinstimmungen zu verhindern gegen 14002 (THX Adrian)
% bedeutet, in allen Linien./g bedeutet jede Übereinstimmung in der Zeile (nicht nur die erste).
Wie funktioniert es gegen die Nummer 140002? –
Sie vermissen ein '\ 1', es sei denn, ich täusche mich. – Tomalak
Guter Punkt. Korrigiert –
Wenn Sie aus irgendeinem Grund keine vollständige Suche durchführen und ersetzen möchten, denken Sie daran, dass ctrl-a
die nächste Zahl unter oder nach dem Cursor erhöht. So im Befehlsmodus, Sie 1000 ctrl-a
treffen könnte die nächste Nummer von 1000.
Wenn Sie unter Windows sind zu erhöhen, eine Antwort in this question sehen, wie ctrl-a
Schritt statt wählen Sie alle zu machen.
Mehr Typisierung, aber weniger denken:
:%s/\d\+/\=submatch(0) >= 4000 && submatch(0) <= 4200 ? submatch(0) + 1000 : submatch(0)/g
- 1. Regulärer Ausdruck Erklärung für vim
- 2. Regulärer Ausdruck in Vim, um Gruppenerfassung
- 3. Python string.replace regulärer Ausdruck
- 4. Regulärer Ausdruck
- 5. Regulärer Ausdruck
- 6. Regulärer Ausdruck in C
- 7. regulärer Ausdruck in Javascript?
- 8. Regulärer Ausdruck in Java
- 9. Regulärer Ausdruck in PHP
- 10. Regulärer Ausdruck in Qt
- 11. Fehler in Regulärer Ausdruck
- 12. Regulärer Ausdruck in SAS
- 13. Regulärer Ausdruck IN SQL
- 14. Regulärer Ausdruck in Powershell
- 15. Mehrzeiliger regulärer Ausdruck in C#
- 16. Regulärer Ausdruck in PL/SQL
- 17. regulärer Ausdruck in Java passenden
- 18. Regulärer Ausdruck Datum in Oracle
- 19. Regulärer Ausdruck - Trennzeichenproblem in PHP
- 20. Regulärer Ausdruck in JavaScript string.split
- 21. internationalisierter regulärer Ausdruck in postgresql
- 22. Regulärer Ausdruck in PowerShell Escape
- 23. Regulärer Ausdruck in C# .net
- 24. Regulärer Ausdruck in Javacscript Validierung
- 25. Regex Regulärer Ausdruck in C#
- 26. Regulärer Ausdruck Hilfe in PHP
- 27. Regulärer Ausdruck Spiel in Javascript
- 28. Extract Regulärer Ausdruck in php
- 29. Regulärer Ausdruck Substitution in Python
- 30. Regulärer Ausdruck in Ruby 2.1.5
Ich denke, das ist der sauberste Weg, da es den kniffligen 4200 Fall implizit behandelt –
dieser wird auch für 4200 arbeiten –