Question

Je veux trouver n'importe quel texte dans un fichier qui correspond à une expression rationnelle du formulaire t[A-Z]toi (c'est-à-dire une correspondance t suivi d'une lettre majuscule et d'une autre correspondance toi, et transformez le texte correspondant pour que la lettre majuscule soit en minuscule.Par exemple, pour l'expression rationnelle x[A-Z]y

xAy

devient

xay

et

xZy

devient

xzy

Emacs' query-replace la fonction permet les références arrière, mais AFAIK pas la transformation du texte correspondant.Existe-t-il une fonction intégrée qui fait cela ?Quelqu'un a-t-il une courte fonction Elisp que je pourrais utiliser ?

MISE À JOUR

@Marcel Levy l'a : \, dans une expression de remplacement introduit une expression Elisp (arbitraire ?).Par exemple, la solution à ce qui précède est

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
Était-ce utile?

La solution

On dirait Steve Yegge en fait, j'ai déjà posté la réponse à cette question il y a quelques années : "Brillant et neuf :Emacs 22." Faites défiler jusqu'à "Changement de casse dans les chaînes de remplacement" et vous verrez son exemple de code utilisant le replace-regexp fonction.

La réponse générale est que vous utilisez "\" pour appeler n'importe quelle expression Lisp dans le cadre de la chaîne de remplacement, comme dans \,(capitalize \1).En lisant le texte d'aide, il semble que ce soit uniquement en mode interactif, mais cela semble être le seul endroit où cela serait le plus nécessaire.

Autres conseils

Une alternative à qrr dans ce cas consiste à enregistrer une macro et à la rejouer.(isearch-forward-regexp, sélectionnez le caractère, downcase-regexp.) Je trouve les macros à la volée plus faciles, car vous obtenez un retour immédiat si votre expression rationnelle est fausse.

Je ferais également cela avec une macro, mais uniquement parce que l'exécution de code à partir d'une chaîne de remplacement pour une expression régulière m'est très peu intuitive.Si vous écrivez un script batch ou quelque chose qui doit aller très vite, \ est certainement la voie à suivre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top