Rechercher-remplacer : remplacer parenthèse par crochet
Fermém@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 - 6 déc. 2023 à 00:48
- Parenthèse crochet
- Rechercher ou entrer l'adresse - Guide
- Rechercher et remplacer word - Guide
- Remplacer disque dur par ssd - Guide
- Adresse IP locale : comment la trouver facilement - Guide
- Quel site pour remplacer coco - Accueil - Réseaux sociaux
3 réponses
5 déc. 2023 à 02:44
Bonjour
Oui, je peux faire un peu de sorcellerie, mais encore faudrait il que Nanane soit toujours intéressé car il n'a pas l'air de répondre aux propositions.
Avant tout, il faudrait poser quelques questions, en particulier le texte entre parenthèses commence-t-il toujours par le mot "para" ce qui simplifierait la solution. Est-ce que les chiffres entre () sont-ils toujours du même nombre ? Y a-t-il des espaces ? etc.
Partant de son exemple qui commence par para, on peut faire ça assez simplement :
Recherche : \((para*\([0-9]{1;3}\))\)
Remplacer par : [\1]
m@rina
1 déc. 2023 à 17:55
bonsoir
A tester
rechercher espace et ( c'est à dire " (" sans les guillemets
remplacer par " ["
rechercher "))"
remplacer par ")]"
1 déc. 2023 à 20:04
Bonjour,
Je n'ai pas encore trouvé (ni vraiment cherché) la syntaxe précise, mais une chose me paraît sûre, on va se faire planter par les caractères recherchés ( ) [] parce qu'ils ont eux-mêmes une signification dans la recherche générique.
Il faut donc les échapper par leurs valeurs ASCII respectives, ^040, ^041, ^092, ^093
Il est donc probable qu'on se fasse planter par la syntaxe de recherche que tu as indiquée, ou en tout cas son remplacement.
En français, il faut donc chercher quelque chose (je suppose) qui commence < par un espace et qui est suivi de ^040 et d'une lettre quelconque [a-z] suivi d'un nombre de caractères génériques quelconque * et se terminant > par ^041 répété 2 fois et remplacer à syntaxe identique ^040 par ^092 et ^041 par ^093.
Je n'ai pas trop le temps de chercher la bonne syntaxe pour le moment, je reviens si je trouve avant toi ou avant que Marina qui est la sorcière de la chose passe par là.
1 déc. 2023 à 23:05
Lapsus, c'est ^091 et ^093.
Recherche en supposant qu'il y un espace avant la chaîne:
([ ][^040])(*)([^040])(*)([^041])([^041])
Les parenthèses servent à couper en autant de morceaux que je peux remplacer en les séparant dans l'ordre par \.
Je devrais donc écrire:
.^091\2\3\4\5\^093
Qui fonctionne bien pour le crochet ouvrant 091, mais pas pour le fermant en 093, tout remplacement qui n'est pas en première position plante.
Bref, si tu as en fonction l'inspiration, je continue à creuser...
2 déc. 2023 à 22:24
Beau fouiller ça dans tous les sens, je ne trouve aucune syntaxe "en une passe".
Au plus simple, on fait comme yclick a suggéré, mais ça manque peut-être de sélectivité pour chercher " (".
On peut éventuellement sécuriser un peu en deux passes comme suit.
Activer les caractères génériques.
Chercher ([ ][(])(*)([(])([0-9]@)([)])([)]) qui enlève à peu près toute chance de trouver autre chose.
Remplacer par .[\2\3\4\5\6 (il y a un espace avant le crochet) qui remplace la première parenthèse entrante.
Le hic, c'est que je ne trouve aucun moyen de sécuriser la recherche pour remplacer la parenthèse fermante, devant en effet se contenter, caractères génériques désactivés, de faire une deuxième recherche )) (tout de même peu probable dans un texte "normal" par ailleurs) remplacée par )]
3 déc. 2023 à 19:56
Illustrons par l'exemple, soit la chaîne (para. 7(1)) où il y a un espace avant la parenthèse entrante, et où la chaîne et le nombre entre parenthèses sont quelconques.
La théorie se fait en une passe.
En cherchant caractères génériques ([!^040 ])(*)([(])([0-9]@)([)]) j'obtiens para. 7(1) sans les parenthèses fermantes.
L'opérateur & échappé soit ^& me permet de rendre dans remplacer ce que j'ai recherché, en théorie, je fais donc remplacer, [^&] (espace avant) remplacer tout, et on va se coucher.
Donc à tester, il y a peut-être un bug dans mon installation Word qui conserve les parenthèses: [(para. 7(1))]
Si c'est le cas, j'ai besoin de 2 passes supplémentaires (je pourrais écrire une syntaxe complexe pour une seule, mais bon) en désactivant les caractères génériques:
([ Remplacer par [ partout et même chose pour ]) par ] avec un meilleur niveau de sécurité tant il est improbable de trouver dans un texte les deux séquences de départ (sauf si on cause de programmation, math, chimie ou de la norme bibliographique qui veut que
([ ]) indique une précision à l'intérieur des parenthèses ou bien de toute exigence différente qu'aurait tel directeur de thèse ou de publication, mais là, on n'en sort plus...
2 déc. 2023 à 23:57
si tu n'as pas énormément de chiffre différent dans ta deuxième parenthèse tu peux
rechercher (1) puis les autres
remplacer par %1#
ensuite tu remplaces toutes les ( par [ et #) par )]
puis % par (
ca fait un peu de manip mais si tu n'as pas trop d'occurrence différentes !
3 déc. 2023 à 08:06
Bonjour,
Le but de l'opération comme l'auteur l'a précisé est de limiter les nombre de manipulations; là on en a 3 pour chaque nombre et, s'agissant vraisemblablement de renvois de notes ou bibliographiques, on peut supposer qu'il y en a un paquet (contre 2 pour tous dans ce que j'ai proposé mais qui n'est certes pas sécurisé à 100% dans la deuxième)
La seule manière de traiter simultanément tous les nombres y compris, pourquoi pas, à plusieurs chiffres, est comme je l'ai indiqué une recherche de type ([0-9]@).
Le hic est qu'elle utilise contrairement à la tienne des caractères génériques et qu'on se fait jeter comme je l'ai rappelé en <4> par tout remplacement d'un autre morceau que \1 et d'autant qu'il s'agit des caractères () et [] qui eux-mêmes ont une signification dans la syntaxe de rechercher-remplacer et qu'il faut donc échapper.
3 déc. 2023 à 08:19
J'avais pensé à une alternative par Batch, avec un peu de travail, on peut écrire exactement la structure de ce qu'il y à remplacer, mais là aussi, il y a un hic: le Batch ne lit que le format texte brut (doc) et pas le format compressé, (docx).
On peut alors passer par le portage sous Windows d'un outil Linux style PowerGrep en essai libre (ou Grep) qui sera à même d'effectuer le job en une seule passe, mais qui se heurte au fait de le télécharger/installer et d'y écrire la syntaxe idoine, ce qui outre y passer sans doute plus de temps que de faire des opération successives passe par celui d'en acquérir les compétences.
5 déc. 2023 à 07:54
Bonjour,
Certes, mais en supposant comme je l'ai fait, et sans tes compétences, qu'il s'agit d'un document qui peut comporter de multiples occurrences qui peuvent présenter n'importe quelle chaîne du moment qu'il y a une double parenthèse et que celle interne peut comporter n'importe quel nombre?
J'avais envisagé en haut de mon commentaire en <9> une solution qui me paraissait devoir fonctionner mais qui crée les crochets en maintenant les parenthèses tandis que si par ailleurs je cherche à saucissonner un remplacement je me fais jeter par toute syntaxe du type \1\n(caractère) quand (caractère) n'est pas en 1.
5 déc. 2023 à 13:27
Bonjour brucine
Pas sûre d'avoir compris tout, mais dans le remplacement le signe \ suivi du numéro fait référence aux termes de recherche entre parenthèses.
Donc dans mon exemple je n'ai qu'un seul terme entre parenthèses. Donc je remplace bêtement par un crochet ouvrant simple, le contenu \1 qui correspond au terme entre parenthèses, et un crochet fermant simple.
Je précise que pour chercher un caractère qui est un caractère générique, il suffit de le faire précéder par le signe \.
Donc \( recherche une parenthèse ouvrante.
m@rina
5 déc. 2023 à 14:25
Bonjour m@rina,
Oui, toujours intéressée. Je crois que nous ne sommes pas dans le même fuseau horaire, d'où le décalage... ;)
Dans cet exemple, le texte commençait effectivement toujours par "para."
Comme je l'indiquais dans ma question, les chiffres ne sont pas toujours les mêmes. "para." peut être suivi d'une espace ou d'une espace insécable.
Dans la solution, je crois comprendre que [\1] renvoie à la première paire de parenthèses.
C'est nouveau pour moi tout ça, alors j'essaie de bien démêler la syntaxe pour pouvoir me débrouiller la prochaine fois!
Je note la solution.
Merci de votre aide!
5 déc. 2023 à 14:39
Bonjour Nanane,
Non, regarde ce que j'ai expliqué plus haut dans le <14>.
m@rina
5 déc. 2023 à 20:18
Ah oui, je vois... le \1 renvoie à "(para*\([0-9]{1;3}\))" qu'on encadre simplement des crochets.
Je craignais que le crochet ne soit aussi traité comme un caractère générique dans le champ Remplacer.
Bref... j'apprends!