Question

J'utilise Notepad ++ pour remplacer du texte dans un fichier de langue de 5453 lignes. Le format des lignes du fichier est:

variable.name = Variable Value Over Here, that''s for sure, Really

La double apostrophe est intentionnelle.

Je dois convertir la valeur en majuscule, à l'exception des mots "Ici". et " Vraiment " qui sont appropriés et doivent rester capitalisés. Comme vous pouvez le constater, la casse de la valeur est généralement mélangée pour commencer.

J'ai travaillé dessus pendant un petit moment. Tout ce que j'ai jusqu'à présent, c'est:

 (. )([A-Z])(.+)

qui semble au moins sélectionner les chaînes appropriées. La pièce de remplacement est l'endroit où je me bats.

Était-ce utile?

La solution

Le remplacement de regex ne peut pas exécuter de fonction (comme la capitalisation) sur les correspondances. Vous devez écrire un script qui, par exemple en PHP ou JavaScript.

Mise à jour: Voir la réponse de Jonas .

Je me suis construit une page Web appelée Utilitaires de texte à faire. ce genre de choses:

  • collez votre texte
  • aller dans " Rechercher, expression rationnelle & amp; remplacer " (ou appuyez sur Ctrl + Maj + F )
  • entrez votre regex (le mien serait ^ (. *? \ = \ s * \ w) (. *) $ )
  • vérifiez les " ^ $ limites de ligne de correspondance " option
  • choisissez "Appliquer la fonction JS aux correspondances"
  • .
  • ajouter des arguments (d'abord la correspondance, puis les sous-modèles), ici s, début, reste
  • changez l'instruction de retour en return start + rest.toLowerCase ();

La dernière fonction dans la zone de texte ressemble à ceci:

return function (s, start, rest) {
     return start + rest.toLowerCase();
};

Peut-être ajouter du code pour mettre en majuscule des mots tels que "Vraiment" et "ici".

Autres conseils

Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3

Dans Notepad ++ 6.0 ou version ultérieure (livré avec le support intégré PCRE ).

Dans Notepad ++, vous pouvez utiliser un plugin appelé PythonScript pour effectuer le travail. Si vous installez le plugin, créez un nouveau script comme suit:

entrer la description de l'image ici

Vous pouvez ensuite utiliser le script suivant, en remplaçant les variables de regex et de fonction à votre convenance:

import re

#change these
regex = r"[a-z]+sym"
function = str.upper

def perLine(line, num, total):
for match in re.finditer(regex, line):
    if match:
        s, e = match.start(), match.end()
        line = line[:s] + function(line[s:e]) + line[e:]
        editor.replaceWholeLine(num, line)

editor.forEachLine(perLine)

Cet exemple particulier fonctionne en trouvant toutes les correspondances dans une ligne particulière, puis en appliquant la fonction à chaque correspondance. Si vous avez besoin d’un support multiligne, le script Python "Conext-Help" explique toutes les fonctions offertes, y compris les fonctions pymlsearch / pymlreplace définies sous l’objet 'editor'.

Lorsque vous êtes prêt à exécuter votre script, accédez d'abord au fichier sur lequel vous souhaitez l'exécuter, puis à la section "Scripts". dans le menu Script Python et lancez le vôtre.

Remarque: bien que vous puissiez probablement utiliser la fonctionnalité d'annulation de notepad ++ si vous vous trompez, il peut être judicieux de placer le texte dans un autre fichier pour vérifier qu'il fonctionne correctement.

P.S. Vous pouvez "rechercher" et "marquer" chaque occurrence d'une expression régulière à l'aide de la boîte de dialogue de recherche intégrée de notepad ++. Si vous pouviez toutes les sélectionner, vous pourriez utiliser l'option "Caractères-> de caractères majuscules" de TextFX. fonctionnalité pour ce problème particulier, mais je ne suis pas sûr de savoir comment passer du texte marqué ou trouvé au texte sélectionné. Mais je pensais publier ceci au cas où quelqu'un le ferait ...

Modifier: Dans Notepad ++ 6.0 ou version ultérieure, vous pouvez utiliser la fonction de recherche / remplacement PCRE (expression régulière compatible Perl) " (source: http://sourceforge.net/apps/mediawiki/notepad- plus /? title = Regular_Expressions ) Cela aurait donc pu être résolu en utilisant une expression rationnelle telle que (.) ([Az]) (. +) avec un argument de remplacement tel que \ 1 \ U \ 2 \ 3 .

L’interrogateur avait un cas très spécifique à l’esprit. En tant que général, "changer de phrase" dans le bloc-notes ++ la première suggestion d'expressions rationnelles n'a pas fonctionné correctement pour moi. Bien que pas parfait, voici une version peaufinée qui était une grande amélioration par rapport à l'original pour mes besoins:

find:    ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+) 
replace: \1\U\2\L\3

Vous avez toujours un problème avec les noms en minuscules, les noms, les dates, les pays, etc., mais un bon correcteur orthographique peut vous aider.

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