J'ai plusieurs cordes qui ressemblent à ça :
sum({foo, c[0663, 0667, 0673, 0677, 0693, 0697, 0703, 0707]})
sum({foo, c[0663, 0667, 0673, 0677, 0693]})
sum({foo, c[0697, 0703, 0707]})
sum({foo, c[0693, 0697, 0703, 0707]})
Je peux les trouver tous, en utilisant cette regex :
sum\(\{foo, c\[(?:(\d{4})(, )?)+\]\}\)
Le problème apparaît lorsque je dois remplacer les lignes, qui contiennent des occurrences variables de 4 chiffres, séparés par une virgule et un espace.
La sortie de la première ligne devrait donc ressembler à ceci :
[1234] 0663 + [1234] 0667 + [1234] 0673 + [1234] 0677 + [1234] 0693 + [1234] 0697 + [1234] 0703 + [1234] 0707
De la deuxième ligne :
[1234] 0663 + [1234] 0667 + [1234] 0673 + [1234] 0677 + [1234] 0693
Et ainsi de suite.
En gros, toutes les occurrences des caractères à quatre chiffres doivent être remplacées par :
[1234] xxxx
("[1234]" est une chaîne constante) (x représente un chiffre)
et le
,
(espace virgule)
doit être remplacé par
+
(signe plus)
Par conséquent, il ne doit pas avoir le signe + ni au début ni à la fin de la ligne, d'où la raison pour laquelle, les quatre chiffres sont traités séparément du ", " (espace virgule).
Normalement, je ferais le modèle de remplacement comme :
[1234] \1
Mais cela mettra [1234] et le dernier motif sauvegardé, donc dans le cas de la première ligne, il serait remplacé par :
[1234] 0707
De même, la partie ", " (espace virgule) doit toujours être remplacée par le signe plus.