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'
user705628
la source

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 \).

simlev
la source
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'xxx est un nombre d'au moins un chiffre.

Máté Juhász
la source
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