web-dev-qa-db-fra.com

Expression régulière C # pour correspondre à n'importe quel caractère?

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.

30
oscilatingcretin

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.

50
qJake

Utilisez le mode monoligne:

Regex.Replace(s, "<test>.*<test>", "", RegexOptions.Singleline);
11
Blindy

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);
0
vapcguy