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.