Le problème va comme ceci: p>
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 P>
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 p>
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 P>
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? P>
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. p>
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 ++ P>
3 Réponses :
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
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.
(? :( 218) | (332) | (420)) \ d {3} (\ d {4}) (? = @ Domain \ .com) code> < / li>
- Remplacez par:
(? {1} 10 $ 4) (? {2} 11 $ 4) (? {3} 12 $ 4) CODE> LI>
-
chèque strong> enveloppe em> li>
-
chèque strong> expression régulière em> li>
- Remplacez tout kbd> li>
Explication: strong> p> xxx pré> Remplacement: strong> p> xxx pré> Capture d'écran (avant): strong> p>
@toto a une bonne réponse et il y a une autre méthode si l'opérateur Ajouter au Fin du doc: p> rechercher: p> (? {1} ...) code> 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
Vous pouvez remplacer la correspondance de
\ b \ d * (? = \ D {4} @) code> avec
"10" code>.
(? = \ d {4} @) code> est un lookahead positif i>, 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 ++