En C #, j'écris la chaîne suivante dans une variable chaîne, un retour chariot et tous:
asdfasdfasdf
asdfas<test>asdfasdf
asdfasdf<test>asdfasdf
Dans Notepad2, j'utilise cette expression régulière:
<test>.*<test>
Il sélectionne ce texte comme prévu:
<test>asdfasdf
asdfasdf<test>
Cependant, quand je fais cela en C #:
System.Text.RegularExpressions.Regex.Replace(s, "<test>.*<test>", string.Empty);
Il ne supprime pas la chaîne. Cependant, lorsque je lance ce code sur une chaîne sans retour à la ligne, cela fonctionne.
Donc, ce que je recherche, c’est une regex qui correspondra à n’importe quel caractère, qu’il s’agisse ou non d’un code de contrôle ou d’un caractère normal.
Vous avez oublié de spécifier que l'opération Regex (en particulier l'opérateur .
) doit correspondre à tous caractères (pas tous les caractères sauf \ n):
System.Text.RegularExpressions.Regex.Replace(s, "<test>.*<test>", string.Empty, RegexOptions.Singleline);
Tout ce que vous deviez ajouter était RegexOptions.Singleline
.
Utilisez le mode monoligne:
Regex.Replace(s, "<test>.*<test>", "", RegexOptions.Singleline);
Vous pouvez supprimer les retours à la ligne dans la chaîne, puis faire votre correspondance:
s = s.Replace(Environment.NewLine, "");
Ensuite, cela devrait fonctionner comme prévu:
System.Text.RegularExpressions.Regex.Replace(s, "<test>.*<test>", string.Empty);