Comment utiliser regex pour remplacer des caractères autres que des mots dans un morceau de chaîne spécifique?
Question
J'ai un fichier texte avec une ligne comme celle-ci:
SendersTimeSeriesIdentification: COMPANY_A/COMPANY_B/REF_7/20090505
Je souhaite remplacer tous les caractères non verbaux de la partie valeur par le caractère n
, comme suit:
SendersTimeSeriesIdentification: COMPANYnAnCOMPANYnBnREFn7n20090505
Mais il existe des chaînes similaires dans tout le fichier, qui doivent rester intactes. Un exemple étant:
MessageIdentification: REF_7/VER_1/20090505
Je pense que je dois utiliser lookbehind et je suis arrivé à cette tentative (VB.NET):
Regex.Replace(fileContentString, "(?<=SendersTimeSeriesIdentification: )(\W)", "0")
Cela ne fonctionne pas comme je le voudrais. Donc mes questions sont:
Est-il possible de remplacer tous les caractères autres que des mots dans un morceau de chaîne spécifique par un seul appel Regex.Replace? Comment?
La solution
Essayez celui-ci:
Regex.Replace(fileContentString, "(?<=SendersTimeSeriesIdentification:\s.*)[_\W]", "0")
Ceci remplace tous les caractères \ W et _ par "& 0;" " après "SendersTimeSeriesIdentification:".
Autres conseils
Plutôt que de remplacer une seule expression rationnelle, je scindais le fichier en lignes, puis ne traitais que les lignes commençant par "SendersTimeSeriesIdentification:". De cette façon, le remplacement de regex est simple et agréable.