0
votes

Regex unique pour attraper plusieurs options et remplacer par leurs remplacements correspondants

Le problème va comme ceci:

correspondance de la valeur: 218 \ d {3} (\ d {4}) @ domain.com Remplacer par 10 \ 1 pour obtenir 10 suivi par les 4 derniers chiffres Par exemple, 2181234567 deviendrait 104567

Valeur Correspondance: 332 \ d {3} (\ d {4}) @ domain.com Remplacer par 11 \ 1 pour obtenir 11 suivi des 4 derniers chiffres Par exemple, 3321234567 deviendrait 114567

correspondance de la valeur: 420 \ d {3} (\ d {4}) @ domain.com Remplacer par 12 \ 1 pour obtenir 12 suivi de 4 derniers chiffres ..etc Par exemple, 4201234567 deviendrait 124567

Y a-t-il un meilleur moyen d'attraper différentes valeurs et de remplacer par leurs remplacements correspondants dans une seule regex que de créer plusieurs expressions?

Comme (218 | 332 | 420) \ d {3} (\ d {4}) @ domain.com pour remplacer 10 \ 4 | 11 \ 4 | 12 \ 4) et obtenez simplement leurs résultats correspondants lors de la correspondance.

EDIT: N'A PAS Spécifié le cas d'utilisation: c'est pour mon PBX, qui utilise simplement REGEX pour correspondre à des motifs, puis remplacez-le avec les valeurs que je veux qu'il sort. Pas de code. Juste directement surgèrent dans l'interface graphique. Aussi pour un usage personnel, si je peux l'obtenir pour travailler avec Notepad ++


4 commentaires

Vous pouvez remplacer la correspondance de \ b \ d * (? = \ D {4} @) avec "10" . (? = \ d {4} @) est un lookahead positif , affirmant que la correspondance doit être suivie de quatre chiffres suivis par "@". ref


Quelle langue / outil utilisez-vous? Du info de tag Regex : "Étant donné que les expressions régulières ne sont pas entièrement normalisées, toutes les questions avec cette balise doivent également inclure une étiquette spécifiant le langage ou l'outil de programmation applicable. "


Ceci est facile à faire avec la langue prenant en charge la langue PCRE2 ou Perl. Notepad ++ prend également en charge le remplacement conditionnel.


C'est surtout pour mon PBX, mais je veux aussi utiliser pour Notepad ++


3 Réponses :


0
votes

Je ne pense pas que vous puissiez utiliser une seule expression régulière pour remplacer conditionnellement le texte selon votre exemple. Vous avez besoin de chaîner plusieurs recherches et remplacez ou utilisez une fonction basée sur le premier groupe capturé (trois premiers chiffres).

Vous n'avez pas spécifié la langue utilisée, les expressions régulières varient en fonction de la langue. Voici un extrait de code JavaScript qui utilise la fonction avec une approche de recherche: p>

p>

str1: 2181234567@domain.com, result1: 104567@domain.com
str2: 3321234567@domain.com, result2: 114567@domain.com
str3: 4201234567@domain.com, result3: 124567@domain.com


1 commentaires

Je t'ai eu. Semble que je ne peux pas l'utiliser pour mon PBX alors, car il n'y a pas de fonctionnalité pour ajouter un code personnalisé là-bas. Tout ce qu'il peut prendre, c'est de simples modèles de regex.



1
votes
  • ctrl + h
  • Trouvez quoi: (? :( 218) | (332) | (420)) \ d {3} (\ d {4}) (? = @ Domain \ .com) < / li>
  • Remplacez par: (? {1} 10 $ 4) (? {2} 11 $ 4) (? {3} 12 $ 4)
  • chèque enveloppe
  • chèque expression régulière
  • Remplacez tout

    Explication: xxx

    Remplacement: xxx

    Capture d'écran (avant):

    Entrez la description de l'image ici

    Capture d'écran (après):

     Entrez la description de l'image ici


0 commentaires

0
votes

@toto a une bonne réponse et il y a une autre méthode si l'opérateur (? {1} ...) n'est pas disponible (mais merci, toto, je ne connaissais pas cette caractéristique de Notepad ++). Plus de détails sur ma réponse ici: https://stackoverflow.com/a/63676336/1287856

Ajouter au Fin du doc: xxx

rechercher: xxx

remplacer par xxx

regarder en action: Multiples remplaçants dans le bloc-notes ++


0 commentaires