Verwenden Sie Notepad ++, um under_score_case in CamelCase zu ändern?

19

Ich kann einen regulären Ausdruck in NP ++ finden under_score_case. Ich kann TextFX in NP ++ verwenden, um die Groß- und Kleinschreibung durch Hervorheben und Auswählen zu ändern.

Wie kann ich entweder NP ++ 's Suchen / Ersetzen oder TextFX des Suchens und Ersetzens diese zusammen und konvertieren zum Aufnähen under_score_caseauf camelCase?

Ich möchte lernen, wie man dies in NP ++ macht, ohne ein Skript zu verwenden.

Beispieleingabe:

this is_a_line
some more_data_over_here
whoop de_do_da

Gewünschte Ausgabe:

this isALine
some moreDataOverHere
whoop deDoDa

Der zu den Unterstrichen passende reguläre Ausdruck wäre _([a-z]). Der Ersatz, von dem ich denke, dass er existiert, den ich aber nicht finden kann, ist so etwas wie _\toupper\1.

Freiheit
quelle

Antworten:

6

Ich habe eine Lösung, die langwierig und kompliziert ist, aber in Notepad ++ funktioniert. Es erfordert die Verwendung von Regex, optional normales Suchen und Ersetzen sowie TextFX.

  1. Fügen Sie vor jedem Wort, das ich ausgewählt habe, ein Platzhalterzeichen ein Z. Es muss wahrscheinlich nicht alphabetisch sein, aber für den letzten Schritt ist es einfacher. Suchen \<([^ ]*)\>und ersetzen Sie mit regex Z\1.
  2. Ersetzen Sie vorhandene Leerzeichen durch eine eindeutige Platzhalterfolge. Ich habe # space # gewählt. Dies kann mit Regex geschehen, ich bevorzuge jedoch die Verwendung von normal oder erweitert.
  3. Ersetzen Sie Unterstriche durch Leerzeichen. Wenn Unterstriche vorhanden sind, die nicht ersetzt werden sollten, ist wahrscheinlich eine benutzerdefinierte Regex erforderlich. Ich habe gerade gesucht und ersetzt.
  4. Markieren Sie den gesamten Text und wählen Sie im Menü TextFX die Option TextFX Characters -> Proper Case.
  5. Jetzt müssen wir die ersten 3 Schritte umkehren. Suche nach Räumen und ersetze sie durch nichts. Suchen Sie dann nach Ihrer Space-Platzhalter-Sequenz und ersetzen Sie sie durch ein Leerzeichen. Suchen \<Z([^ ]*)\>und ersetzen Sie schließlich mit regex \1.
MBraedley
quelle
Gewunden, aber es funktioniert.
Freiheit
Das Versagen von Notepad ++ mit regulären Ausdrücken hat mich dazu veranlasst, Lösungen wie diese zu finden, insbesondere wenn ich zeilenübergreifend suchen und ersetzen oder Sonderzeichen wie Tabulatoren verwenden muss.
MBraedley
Hat der Projektleiter von NP ++ (Herr Ho, wie ich mich erinnere) irgendwelche Geräusche von der Einführung einer vim-artigen Ersatzunterstützung gemacht? Gibt es Plugins, die das unterstützen? NP ++ und TextFX sind wirklich mächtig, sie brauchen nur ein bisschen mehr, um sie zusammenzufügen.
Freiheit
Ich verfolge das Projekt nicht wirklich, aber ich stelle mir vor, dass er durch den Einsatz von Scintilla eingeschränkt wird.
MBraedley
1
Eine Einschränkung: Wenn das zweite und nachfolgende Zeichen in jedem Wort ein Großbuchstabe ist, wird es in Kleinbuchstaben umgewandelt, z . B. ALL_CAPSwird allCaps.
Gnubie
15

Ein einfaches Suchen / Ersetzen erledigt dies in NP ++:

Finden: [_]{1,1}([a-z])

Ersetzen: \U$1

Sie müssen das Optionsfeld "Regulärer Ausdruck" im Ersetzen-Bedienfeld aktivieren, damit dies funktioniert.

eurono
quelle
5
Oder einfach _(.)als Suchbegriff.
Dominic Comtois
Wenn Sie PascalCase (in einem Schritt) möchten, können Sie Suchen: (?:^|_)([a-z]) Ersetzen: \U$1$2
Rubenisme
6

Normalerweise benutze ich vim selbst als Editor. Der folgende reguläre Ausdruck führt das aus, was Sie in vim versuchen:

%s/_\([a-zA-Z]\)/\u\1/g

Nach allem, was ich sagen kann ( ich habe ein bisschen mit NP ++\u rumgespielt ), versteht Notepad ++ das Makro in Perl Regexp nicht in Großbuchstaben . Möglicherweise können Sie dies nicht vollständig mit Notepad ++ ausführen. Hoffentlich wird mir jemand das Gegenteil beweisen und dir den Tag versüßen.

Sean C.
quelle
Ja, ich stecke in einer Windows-Umgebung fest. Das Kopieren der Daten auf einen * nix- oder OS X-Computer funktioniert, ist aber kaum sinnvoll. Ich kann auch andere Teamkollegen auf NP ++ trainieren.
Freiheit
Ich denke, der gleiche Ausdruck funktioniert in eMacs. Mein eMac-Wissen ist verschwommen. . .
Surfasb
@Freiheit Es gibt ein vim für Windows; obwohl das nicht hilft, wenn die anderen Teamkollegen auf NP ++
Matrix Mole
Dies scheint in neueren Versionen von Notepad ++ (ich verwende 6.7.7) tatsächlich gut zu funktionieren.
Levante gescheckt
3

Sie können dies mit einem Schritt in Notepad ++ tun, was wahrscheinlich nützlicher ist:

Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

Das einzige Problem dabei ist, dass Sie wissen müssen, wie lange die Under Score maximal anwesend sein kann und wie die Saite endet. Im obigen Beispiel ersetze ich PHP-Dateinamen durch camelCase, da ich weiß, dass der Under Score nicht mehr als dreimal vorhanden sein kann. Weniger ist kein Problem.

Inc33
quelle
2

Mein persönlicher Favorit ist sed. Es ist blitzschnell:

> echo make_me_camel_case_please | sed -es / (_ [az]) / \ U \ 1 / g '-es / _ // g'

makeMeCamelCaseBitte

Sie können die Option -i verwenden, um das Ersetzen einer Datei durchzuführen, die Sie gerade bearbeiten, und N ++ sollte die Änderung übernehmen.

Dadurch werden auch alle Unterstriche gelöscht, wie dies bei einigen der oben genannten Lösungen der Fall ist. Das kann behoben werden, wenn dies ein Problem ist.

Kapitän Lepton
quelle
2
  • Konvertieren Sie den Snake CaseIch könnte dies mit Notepad ++ tun, indem Sie die folgenden Schritte ausführen.

  • Konvertieren Sie die Eingabe in Schlangenbuchstaben in Kleinbuchstaben, falls nicht bereits in Kleinbuchstaben

  • Öffnen Sie das Ersetzen-Formular ( Suchen-> Ersetzen ODER Strg + H )
  • Aktivieren Sie das Optionsfeld Regulärer Ausdruck
  • Suchen Sie nach _([a-z])OR_(.)
  • Durch \u\1Eingabe ersetzen
Rathishkumar Nair
quelle
0

Ich arbeite mit Notepad ++ 7.3. Ich hatte das gleiche Problem und ich habe Folgendes getan:

  1. Ctrl+ H(Suchformular anzeigen)
  2. Aktivieren Sie das Optionsfeld Regulärer Ausdruck
  3. Suchen Sie nach «_ ([az] +)»
  4. Ersetzen durch «\ u \ 1»

Und hat funktioniert!

Francisco M
quelle
Das würde also alle Buchstaben in Kleinbuchstaben ändern und dann die Buchstaben, die auf Unterstriche folgen, großschreiben, richtig? So We use the bean_counter variable, which was Fred's ideawürde geändert we use the beanCounter variable, which was fred's idea(Kleinschreibung der Buchstaben , die bereits aktiviert wurden)? Dies scheint unbefriedigend.
Scott
Vielen Dank, Scott, ich habe die Idee nicht vollständig verstanden, also hoffe ich, dass sie jetzt in Ordnung ist.
Francisco M
Ja das ist besser Sie könnten es wahrscheinlich ein wenig vereinfachen: Suchen Sie einfach nach «_ ([az])» (ohne das +). Leider entspricht dies nun im Wesentlichen mehreren der vorherigen Antworten.
Scott