Regex pour la recherche multiple et remplace Notepad ++


0

S'il vous plaît aidez-moi dans le modèle suivant

Texte actuel

ALPHA;111,'BI_209'
ALPHA;222,'BI_213'
ALPHA;AAA,'BI_209'
ALPHA;FFF,'BI_209'
ALPHA;123,'BI_220'

Statut prévu après le premier tour de recherche et; remplacer dans Notepad ++

BI_209;111,'BI_209'
ALPHA;222,'BI_213'
BI_209;AAA,'BI_209'
BI_209;FFF,'BI_209'
ALPHA;123,'BI_220'

Comme vu ci-dessus, au premier tour - j'ai l'intention de rechercher un motif spécifique * ALPHA* BI_209* et remplacer par *BI_209*BI_209*.
Aidez-moi s'il vous plaît avec les expressions rationnelles correctes dans FIND ainsi que les champs REMPLACER pour obtenir ce que je compte obtenir. Notez qu'il existe différents textes tels que '; 111,' ..... '; 222,' .... '; AAA,' entre lesquels ne devraient pas être modifiés ou affectés.

Si je reçois un modèle pour trouver et; remplacez, ce serait une aide dans un deuxième (et plus) tour (s) de plusieurs trouvailles et; remplacer - pour obtenir ce résultat

BI_209;111,'BI_209'
BI_213;222,'BI_213'
BI_209;AAA,'BI_209'
BI_209;FFF,'BI_209'
BI_220;123,'BI_220'

Réponses:


1
  1. Trouver quoi: ALPHA(.*'BI_209')

    Remplacer par: BI_209\1

    Explication: ce qui correspond aux expressions rationnelles entre les parenthèses est enregistré et peut être rappelé avec \1. Les parenthèses peuvent définir plusieurs groupes de capture, par exemple (ALPHA)(.*)('BI_209'), qui peut être réutilisé avec des références arrières \1, \2, \3 ...

  2. En réunissant tout cela, vous pourriez faire toutes les substitutions en un seul passage

    Trouver quoi: ALPHA(.*)'(BI_209|BI_213|BI_220)'

    Remplacer par: \2\1'\2'

    Ici le | symbole spécifie des chaînes alternatives à rechercher.

  3. Voici une solution plus générale au cas où vous ajouteriez ultérieurement des codes différents:

    Trouver quoi: ALPHA(.*)'(BI_\d{3})'

    Remplacer par: \2\1'\2'

    Ici \d correspond à n’importe quel chiffre et est un synonyme de [0-9]; {3} est le facteur de répétition; \d{3} correspond à toute séquence d’exactement trois chiffres.

Remarque: comme les parenthèses sont des caractères spéciaux, si vous voulez spécifier un caractère littéral ( ou ) vous devez y échapper avec une barre oblique inverse, comme ceci: \( et \).


Waouh ça a fonctionné comme un charme :) Merci.
— user705628

J'y suis allé étape par étape afin de mieux expliquer les options disponibles. La réponse de Máté Juhász résout immédiatement votre dernier point et est plus générale.
— simlev

Explication géniale. J'ai utilisé la logique selon laquelle vous devez tout faire d'un coup. i.e rechercher (ALPHA) (. *) (BI _) (. *) (') et remplacer par \ 3 \ 4 \ 2 \ 3 \ 4 \ 5
— user705628

Génial, j'aime bien le fait que vous puissiez utiliser les informations fournies pour élaborer votre propre solution.
— simlev

Simlev - Couple de questions
— user705628

1

Pour trouver un texte ALPHA...'BI_xxx' et remplacer à 'BI_xxx'...'BI_xxx':

  • ouvrir le dialogue rechercher et remplacer
  • cocher "expression régulière"
  • trouver quoi: ALPHA(.*'(BI_\d+)')
  • remplacer par: \2\1
    Essaye-le ici

Cela correspondra à tout 'BI_xxx' où xxx est un nombre d'au moins un chiffre.


1
En ce qui concerne mon vote, je ne pensais pas utiliser des groupes de capture imbriqués. L'ensemble intérieur de () devrait être déplacé à l'intérieur du '' afin de fournir la solution exacte.
— simlev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.