Utilisez Notepad ++ pour changer under_score_case en CamelCase?

19

Je peux écrire une expression régulière dans NP ++ pour la trouver under_score_case. Je peux utiliser TextFX dans NP ++ pour changer la casse en majuscules et minuscules en surlignant et en sélectionnant.

Comment puis - je utiliser soit NP Recherche de ++ / Remplacer ou la découverte de TextFX et remplacer pour assembler ces ensemble et convertir under_score_caseà camelCase?

Je veux apprendre à faire cela dans NP ++ sans utiliser de script.

Exemple d'entrée:

this is_a_line
some more_data_over_here
whoop de_do_da

Sortie désirée:

this isALine
some moreDataOverHere
whoop deDoDa

Le regex pour correspondre aux traits de soulignement serait _([a-z]). Le remplacement que je pense existe, mais je ne trouve pas quelque chose comme _\toupper\1.

Freiheit
la source

Réponses:

6

J'ai une solution longue et compliquée, mais qui fonctionnera dans Notepad ++. Il nécessite l'utilisation de regex, éventuellement la recherche et le remplacement normaux, ainsi que TextFX.

  1. Ajoutez un caractère d'espace réservé au début de chaque mot, j'ai choisi Z. Il n'est pas nécessaire que ce soit alphabétique, mais c'est plus facile pour la dernière étape. En utilisant regex, recherchez \<([^ ]*)\>et remplacez par Z\1.
  2. Remplacez les espaces existants par une séquence d'espace réservé unique. J'ai choisi # espace #. Cela peut être fait avec regex, mais je préfère utiliser normal ou étendu.
  3. Remplacez les traits de soulignement par des espaces. S'il y a des traits de soulignement qui ne doivent pas être remplacés, une expression régulière personnalisée est probablement requise. Je viens de faire une recherche directe et de remplacer.
  4. Sélectionnez tout le texte et dans le menu TextFX, sélectionnez TextFX Characters -> Proper Case.
  5. Maintenant, nous devons inverser les 3 premières étapes. Recherchez des espaces et remplacez-les par rien. Recherchez ensuite votre séquence d'espace réservé et remplacez-la par un espace. Enfin, en utilisant regex, recherchez \<Z([^ ]*)\>et remplacez par \1.
MBraedley
la source
Compliqué, mais ça marche.
Freiheit
Les échecs de Notepad ++ avec regex m'ont amené à proposer des solutions comme celle-ci auparavant, en particulier lorsque j'ai besoin de trouver et de remplacer des lignes ou d'utiliser des caractères spéciaux, comme tab.
MBraedley
Soit dit en passant, le chef de projet sur NP ++ (M. Ho si je me souviens bien) a-t-il fait des bruits sur l'introduction d'un support de remplacement de type Vim? Des plugins pour supporter ça? NP ++ et TextFX sont vraiment puissants, ils ont juste besoin d'un peu plus pour les assembler.
Freiheit
Je ne suit pas vraiment le projet, mais j'imagine qu'il est contraint par l'utilisation de Scintilla.
MBraedley
1
Une mise en garde: si le deuxième caractère et les suivants dans chaque mot est une lettre majuscule, il est mis en minuscule, par exemple ALL_CAPSdevient allCaps.
Gnubie
15

Une simple recherche / remplacement fera cela dans NP ++:

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

Remplacer: \U$1

Vous devez sélectionner le bouton radio «Expression régulière» dans le panneau Remplacer pour que cela fonctionne.

eurono
la source
5
Ou tout _(.)comme la chaîne de recherche.
Dominic Comtois
Si vous voulez PascalCase (en une seule étape) vous pouvez utiliser Find: (?:^|_)([a-z]) Replace: \U$1$2
Rubenisme
6

J'utilise généralement vim moi-même comme éditeur. L'expression régulière suivante accomplit ce que vous essayez de faire dans vim:

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

D'après ce que je peux dire ( je me suis amusé avec NP ++ un peu ), Notepad ++ ne comprend pas la macro majuscule \udans Perl Regexp. Vous ne pourrez peut-être pas le faire entièrement avec Notepad ++. J'espère que quelqu'un me prouvera le contraire et fera de votre journée.

Sean C.
la source
Oui, je suis coincé dans un environnement Windows. La copie des données sur une machine * nix ou OS X fonctionne, mais ce n'est guère gracieux. Je peux également former d'autres coéquipiers sur NP ++.
Freiheit
Je pense que la même expression fonctionne dans les eMacs. Ma connaissance eMac est floue. . .
surfasb
@Freiheit Il existe un vim pour Windows; bien que cela n'aidera pas à former d'autres coéquipiers à NP ++
Matrix Mole
Cela semble effectivement fonctionner correctement dans les versions récentes de Notepad ++ (j'utilise 6.7.7).
levant pied
3

Vous pouvez le faire en une seule étape dans notepad ++, ce qui est probablement plus 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

Le seul problème avec cela, c'est que vous devez connaître la durée maximale pendant laquelle le score inférieur peut être présent et comment la chaîne se termine. Dans l'exemple ci-dessus, je remplace les noms de fichiers php par camelCase, sachant que le sous-score ne peut pas être présent plus de 3 fois, moins n'est pas un problème.

Inc33
la source
2

Mon préféré est sed. C'est rapide comme l'éclair:

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

makeMeCamelCasePlease

Vous pouvez utiliser l'option -i pour effectuer le remplacement sur un fichier que vous modifiez et N ++ devrait reprendre la modification.

Cela supprimera également tous les traits de soulignement, comme avec certaines des solutions ci-dessus. Cela peut être corrigé si c'est un problème.

Capitaine Lepton
la source
2
  • Convertir le cas de serpent Je pourrais le faire en utilisant Notepad ++, en suivant les étapes ci-dessous.

  • Convertir l'entrée de cas de serpent en minuscules, si ce n'est déjà déjà en minuscules

  • Ouvrez le formulaire Remplacer ( Rechercher-> Remplacer OU Ctrl + H )
  • Cochez le bouton radio Expression régulière
  • Recherchez _([a-z])OU_(.)
  • Remplacer par \u\1entrée
Rathishkumar Nair
la source
0

Je travaille avec Notepad ++ 7.3. J'ai eu le même problème et j'ai fait ce qui suit:

  1. Ctrl+ H(afficher le formulaire de recherche)
  2. Cochez le bouton radio Expression régulière
  3. Recherchez «_ ([az] +)»
  4. Remplacer par «\ u \ 1»

Et travaillé!

Francisco M
la source
Donc, cela changerait toutes les lettres en minuscules, puis mettrait en majuscule les lettres qui suivent les traits de soulignement, non? Alors , We use the bean_counter variable, which was Fred's ideaserait changé we use the beanCounter variable, which was fred's idea(les lettres en minuscules qui ont déjà été capitalisés)? Cela semble insatisfaisant.
Scott
Merci, Scott, je n'ai pas bien compris l'idée, alors j'espère que ça ira maintenant.
Francisco M
Oui, c'est mieux. Vous pourriez probablement le simplifier un peu: recherchez simplement «_ ([az])» (sans le +). Malheureusement, cela est maintenant essentiellement équivalent à plusieurs des réponses précédentes.
Scott