¿Usa Notepad ++ para cambiar under_score_case a CamelCase?

19

Puedo escribir una expresión regular en NP ++ para encontrar under_score_case. Puedo usar TextFX en NP ++ para cambiar mayúsculas y minúsculas resaltando y seleccionando.

¿Cómo puedo utilizar ya sea NP ++ 's Buscar / Reemplazar o Buscar y reemplazar TextFX de coser estos juntos y convertir under_score_casea camelCase?

Quiero aprender a hacer esto en NP ++ sin usar un script.

Entrada de muestra:

this is_a_line
some more_data_over_here
whoop de_do_da

Salida deseada:

this isALine
some moreDataOverHere
whoop deDoDa

La expresión regular para que coincida con los guiones bajos sería _([a-z]). El reemplazo que creo que existe, pero no puedo encontrar es algo así _\toupper\1.

Freiheit
fuente

Respuestas:

6

Tengo una solución larga y complicada, pero funcionará en Notepad ++. Requiere el uso de expresiones regulares, opcionalmente búsqueda y reemplazo normales, así como TextFX.

  1. Agregué un carácter de marcador de posición al frente de cada palabra, elegí Z. Probablemente no tiene que ser alfabético, pero es más fácil para el último paso. Usando regex, busque \<([^ ]*)\>y reemplace con Z\1.
  2. Reemplace los espacios existentes con una secuencia de marcador de posición única. Elegí # espacio #. Esto se puede hacer con regex, pero prefiero usar normal o expandido.
  3. Reemplace los guiones bajos con espacios. Si hay guiones bajos que no deberían reemplazarse, entonces probablemente se requiera una expresión regular personalizada. Acabo de hacer una búsqueda directa y reemplazar.
  4. Seleccione todo el texto y, en el menú TextFX, seleccione TextFX Characters -> Proper Case.
  5. Ahora necesitamos revertir los primeros 3 pasos. Busque espacios y reemplácelos con nada. Luego busque su secuencia de marcador de posición de espacio y reemplácela con un espacio. Finalmente, usando regex, busque \<Z([^ ]*)\>y reemplace con \1.
MBraedley
fuente
Enrevesado, pero funciona.
Freiheit
Las fallas de Notepad ++ con regex me han llevado a encontrar soluciones como esta antes, específicamente cuando necesito encontrar y reemplazar líneas o usar caracteres especiales, como tab.
MBraedley
Como comentario aparte, ¿el líder del proyecto en NP ++ (Sr. Ho, según recuerdo) hizo algún ruido sobre la introducción de soporte de reemplazo similar a vim? ¿Algún complemento para soportar eso? NP ++ y TextFX son realmente potentes, solo necesitan un poco más para unirlos.
Freiheit
Realmente no sigo el proyecto, pero imagino que está limitado por el uso de Scintilla.
MBraedley
1
Una advertencia: si el segundo carácter y el siguiente en cada palabra es una letra mayúscula, se convierte en minúscula, por ejemplo, se ALL_CAPSconvierte en allCaps.
Gnubie
15

Un simple buscar / reemplazar hará esto en NP ++:

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

Reemplazar: \U$1

Debe seleccionar el botón de opción 'Expresión regular' en el panel Reemplazar para que esto funcione.

eurono
fuente
55
O simplemente _(.)como la cadena de búsqueda.
Dominic Comtois
Si desea PascalCase (en un solo paso) puede usar Buscar: (?:^|_)([a-z]) Reemplazar: \U$1$2
Rubenisme
6

Normalmente uso vim yo mismo como editor. La siguiente expresión regular logra lo que está intentando hacer en vim:

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

Por lo que puedo decir ( me engañé con NP ++ por un momento ), Notepad ++ no entiende la macro \uen mayúsculas en Perl Regexp. Es posible que no pueda hacer esto por completo con Notepad ++. Con suerte, alguien demostrará que estoy equivocado y te alegrará el día.

Sean C.
fuente
Sí, estoy atascado en un entorno de Windows. Copiar los datos en una máquina * nix o OS X funciona, pero no es nada elegante. También puedo entrenar a otros compañeros de equipo en NP ++.
Freiheit
Creo que la misma expresión funciona en eMacs. Mi conocimiento de eMac es confuso. . .
surfasb
@Freiheit Hay un vim para windows; aunque eso no ayudará con el entrenamiento cruzado de otros compañeros de equipo a NP ++
Matrix Mole
Esto realmente parece funcionar bien en versiones recientes de Notepad ++ (estoy usando 6.7.7).
levant pied
3

Puede hacer esto con un paso en notepad ++, que probablemente sea más útil:

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

El único problema con esto es que necesita saber el tiempo máximo que puede estar presente el puntaje inferior y cómo termina la cadena. En el ejemplo anterior, estoy reemplazando los nombres de archivos php por camelCase, sabiendo que el puntaje inferior no puede estar presente más de 3 veces, menos no es un problema.

Inc33
fuente
2

Mi favorito personal es sed. Es muy rápido:

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

makeMeCamelCasePlease

Puede usar la opción -i para realizar el reemplazo en un archivo que está editando y N ++ debería recoger el cambio.

Esto también eliminará todos los guiones bajos, como con algunas soluciones anteriores. Eso se puede solucionar si esto es un problema.

Capitán Lepton
fuente
2
  • Convertir la caja de la serpiente Podría hacer esto usando Notepad ++, siguiendo los pasos a continuación.

  • Convierta la entrada de mayúsculas y minúsculas en minúsculas, si no está en minúsculas

  • Abra el formulario Reemplazar ( Buscar-> Reemplazar O Ctrl + H )
  • Marque el botón de radio de la expresión regular
  • Busque _([a-z])OR_(.)
  • Reemplazar por \u\1entrada
Rathishkumar Nair
fuente
0

Yo trabajo con Notepad ++ 7.3. Tuve el mismo problema e hice lo siguiente:

  1. Ctrl+ H(mostrar formulario de búsqueda)
  2. Marque el botón de radio de la expresión regular
  3. Busque «_ ([az] +)»
  4. Reemplazar por «\ u \ 1»

Y trabajado!

Francisco M
fuente
Entonces, esto cambiaría todas las letras a minúsculas, y luego capitalizaría las letras que siguen a los guiones bajos, ¿verdad? Entonces, We use the bean_counter variable, which was Fred's idea¿se cambiaría a we use the beanCounter variable, which was fred's idea(en minúsculas las letras que ya estaban en mayúscula)? Esto parece insatisfactorio.
Scott
Gracias, Scott, no entendí completamente la idea, así que espero que ahora esté bien.
Francisco M
Sí eso es mejor. Probablemente podría simplificarlo un poco: solo busque «_ ([az])» (sin el +). Desafortunadamente, esto ahora es esencialmente equivalente a varias de las respuestas anteriores.
Scott