Utilizzare Notepad ++ per cambiare under_score_case in CamelCase?


19

Posso trovare un'espressione regolare in NP ++ per trovare under_score_case. Posso usare TextFX in NP ++ per cambiare maiuscole e minuscole evidenziando e selezionando.

Come posso usare Trova / Sostituisci di NP ++ o Trova e sostituisci di TextFX per unirli insieme e convertirli under_score_casein camelCase?

Voglio imparare a farlo in NP ++ non usare uno script.

Input di esempio:

this is_a_line
some more_data_over_here
whoop de_do_da

Uscita desiderata:

this isALine
some moreDataOverHere
whoop deDoDa

La regex per abbinare i caratteri di sottolineatura sarebbe _([a-z]). Il sostituto che penso esista, ma non riesco a trovare è qualcosa di simile _\toupper\1.

Risposte:


6

Ho una soluzione lunga e contorta, ma funzionerà in Notepad ++. Richiede l'uso di regex, facoltativamente ricerca normale e sostituzione, nonché TextFX.

  1. Ho scelto un carattere segnaposto all'inizio di ogni parola Z. Probabilmente non deve essere alfabetico, ma è più facile per l'ultimo passaggio. Usando regex, cerca \<([^ ]*)\>e sostituisci con Z\1.
  2. Sostituisci gli spazi esistenti con una sequenza segnaposto unica. Ho scelto # spazio #. Questo può essere fatto con regex, ma preferisco usare normale o espanso.
  3. Sostituisci i trattini bassi con spazi. Se sono presenti caratteri di sottolineatura che non devono essere sostituiti, è probabilmente necessario un regex personalizzato. Ho appena cercato e sostituito.
  4. Seleziona tutto il testo e dal menu TextFX, seleziona TextFX Characters -> Proper Case.
  5. Ora dobbiamo invertire i primi 3 passaggi. Cerca gli spazi e sostituiscili con niente. Quindi cerca la sequenza segnaposto spazio e sostituiscila con uno spazio. Infine, usando regex, cerca \<Z([^ ]*)\>e sostituisci con \1.

Contorto, ma funziona.
Freiheit,

Gli errori di Notepad ++ con regex mi hanno fatto venire in mente soluzioni come questa prima, in particolare quando ho bisogno di trovare e sostituire righe o usare caratteri speciali, come tab.
MBraedley,

A parte questo, il progetto su NP ++ (il signor Ho, come ricordo) ha fatto dei rumori sull'introduzione di un supporto sostitutivo simile a vim? Qualche plugin per supportarlo? NP ++ e TextFX sono davvero potenti, hanno solo bisogno di un po 'di più per ricucirli.
Freiheit,

Non seguo davvero il progetto, ma immagino che sia vincolato dall'uso di Scintilla.
MBraedley,

1
Un avvertimento: se il secondo e il successivo carattere di ogni parola è una lettera maiuscola, diventa minuscola, ad esempio ALL_CAPSdiventa allCaps.
Gnubie,

15

Una semplice ricerca / sostituzione farà questo in NP ++:

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

Sostituire: \U$1

È necessario selezionare il pulsante di opzione "Espressione regolare" nel pannello Sostituisci affinché funzioni.


5
O semplicemente _(.)come la stringa di ricerca.
Dominic Comtois,

Se vuoi PascalCase (in un solo passaggio) puoi usare Trova: (?:^|_)([a-z]) Sostituisci: \U$1$2
Rubenisme

6

Di solito uso vim come editor. La seguente espressione regolare realizza ciò che stai cercando di fare in vim:

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

Da quello che posso dire ( ho scherzato con NP ++ per un po ' ), Notepad ++ non capisce la macro maiuscola \uin Perl Regexp. Potrebbe non essere possibile farlo interamente con Notepad ++. Spero che qualcuno mi dimostri di sbagliare e renderà la tua giornata.


Sì, sono bloccato in un ambiente Windows. La copia dei dati su una macchina * nix o OS X funziona, ma non è affatto elegante. Posso anche addestrare altri compagni di squadra su NP ++.
Freiheit,

Penso che la stessa espressione funzioni in eMacs. La mia conoscenza di eMac è confusa. . .
surfasb,

@Freiheit C'è un vim per windows; anche se questo non aiuterà con il crosstraining altri compagni di squadra a NP ++
Matrix Mole

Questo in realtà sembra funzionare bene nelle ultime versioni di Notepad ++ (sto usando 6.7.7).
levant pied

3

Puoi farlo con un solo passaggio in notepad ++, che è probabilmente più utile:

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

L'unico problema è che devi sapere il tempo massimo in cui può essere presente il punteggio inferiore e come termina la stringa. Nell'esempio sopra, sto sostituendo i nomi dei file php a camelCase, sapendo che il punteggio inferiore non può essere presente più di 3 volte, meno non è un problema.


2

Il mio preferito è sed. È velocissimo:

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

makeMeCamelCasePlease

È possibile utilizzare l'opzione -i per eseguire la sostituzione su un file che si sta modificando e N ++ dovrebbe ritirare la modifica.

Questo eliminerà anche tutti i trattini bassi, come con alcune soluzioni sopra. Questo può essere risolto se questo è un problema.


2
  • Converti la custodia del serpente Potrei farlo usando Notepad ++, seguendo i passaggi seguenti.

  • Converti l'input del caso serpente in tutto minuscolo, se non già in minuscolo

  • Apri il modulo Sostituisci ( Cerca-> Sostituisci OR Ctrl + H )
  • Controlla il pulsante di opzione Espressione regolare
  • Cerca _([a-z])OR_(.)
  • Sostituisci con \u\1input

0

Lavoro con Notepad ++ 7.3. Ho avuto lo stesso problema e ho fatto quanto segue:

  1. Ctrl+ H(mostra modulo di ricerca)
  2. Controlla il pulsante di opzione Espressione regolare
  3. Cerca «_ ([az] +)»
  4. Sostituisci con «\ u \ 1»

E ha funzionato!


Quindi questo cambierebbe tutte le lettere in minuscolo, e quindi metterà in maiuscolo le lettere che seguono i caratteri di sottolineatura, giusto? Quindi We use the bean_counter variable, which was Fred's ideasarebbe cambiato in we use the beanCounter variable, which was fred's idea(minuscole le lettere che erano già in maiuscolo)? Questo sembra insoddisfacente.
Scott,

Grazie, Scott, non ho compreso appieno l'idea, quindi spero che ora vada bene.
Francisco M,

Sì, va meglio. Probabilmente potresti semplificarlo un po ': basta cercare «_ ([az])» (senza il +). Purtroppo, questo è ora sostanzialmente equivalente a molte delle risposte precedenti.
Scott,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.