Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REMPLACER UNE CHAINE COMPRISE ENTRE 2 BORNES


Information sur la source

Catégorie :.NET Source .NET ( DotNet ) Classé sous : regex, replace, regularexpressions, remplacement, doublon Niveau : Débutant Date de création : 01/12/2005 Date de mise à jour : 05/09/2006 14:59:34 Vu : 14 211

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


Description

C'est une question que l'on nous pose régulièrement sur les forums :

"Comment remplacer une chaine qui se trouve entre 2 bornes par une autre"

EDIT : ajout d'un snippet à Codyx permettant le remplacement des doublons dans une chaine de caractères (http://www.codyx.org/snippet_remplacement-doublon-dans-chaine_216.aspx)
 

Source

  • /// <summary>
  • /// Remplace une chaine comprise entre 2 bornes
  • /// </summary>
  • /// <param name="orig">Chaine d'origine</param>
  • /// <param name="debut">Borne de début</param>
  • /// <param name="fin">Borne de fin</param>
  • /// <param name="remplacement">Chaine de remplacement</param>
  • /// <param name="laisseBornes">Si true la chaine résultant conserva les bornes</param>
  • /// <returns>Chaine résultat</returns>
  • public string RemplaceChaineEntre(string orig, string debut, string fin, string remplacement, bool laisseBornes) {
  • // on construit l'expression régulière en fonction
  • // des paramètres passés
  • string pattern = string.Format("({0})(.*?)({1})", debut, fin);
  • // on instancie un objet Regex
  • Regex regex = new Regex(pattern, RegexOptions.Singleline);
  • // on retourne une chaine dans laquelle on a remplacé
  • // la portion désirée
  • if (laisseBornes)
  • {
  • return regex.Replace(orig, "$1" + remplacement + "$3");
  • }
  • else
  • {
  • return regex.Replace(orig, remplacement);
  • }
  • }
/// <summary>
/// Remplace une chaine comprise entre 2 bornes
/// </summary>
/// <param name="orig">Chaine d'origine</param>
/// <param name="debut">Borne de début</param>
/// <param name="fin">Borne de fin</param>
/// <param name="remplacement">Chaine de remplacement</param>
/// <param name="laisseBornes">Si true la chaine résultant conserva les bornes</param>
/// <returns>Chaine résultat</returns>
public string RemplaceChaineEntre(string orig, string debut, string fin, string remplacement, bool laisseBornes) {
	// on construit l'expression régulière en fonction
	// des paramètres passés
	string pattern = string.Format("({0})(.*?)({1})", debut, fin);

	// on instancie un objet Regex 
	Regex regex = new Regex(pattern, RegexOptions.Singleline);

	// on retourne une chaine dans laquelle on a remplacé
	// la portion désirée
	if (laisseBornes) 
	{
		return regex.Replace(orig, "$1" + remplacement + "$3");
	} 
	else 
	{
		return regex.Replace(orig, remplacement);
	}
}

Historique

07 décembre 2005 22:10:03 :
ajout du ?
05 septembre 2006 14:59:34 :
Ajout lien vers Codyx

Commentaires et avis

signaler à un administrateur
Commentaire de xavy94 le 07/01/2006 16:59:50

Bonjour,

Est-il possible, à l'aide de ce code par exemple, de récupérer une partie inconnue d'une string, cette partie se trouvant entre deux "bornes" connues.

Dans l'exemple ci dessous, je souhaiterai ne récupérer que "C'est la chaine que je souhaite récupérer", comprise entre "Bonjour" et "Salut"
exemple de string :
"dsjqkldjkslqjkdl dsqd ; dsqjkl, <>ds? Bonjour C'est la chaine que je souhaite récupérer Salut rezpoirezpoifdjskl"

signaler à un administrateur
Commentaire de sebmafate le 07/01/2006 20:27:27 administrateur CS

c'est justement le principe de cette source :D
le pattern "({0})(.*?)({1})" permet de chercher tout texte qui se trouve entre la borne {0} et la borne {1}

signaler à un administrateur
Commentaire de fab244 le 08/08/2006 16:46:55

J'ai la même question que Xavy et je n'ai pas compris ta réponse, pourrais tu réecrire la fin si l'on veut récupérer la chaîne entre les bornes et non la remplacer ?

signaler à un administrateur
Commentaire de sebmafate le 09/08/2006 09:15:46 administrateur CS

ok... il suffit pourtant de lire la documentation.

Pour récupérer le résultat de la capture d'une expression régulière, il faut utiliser la méthode Match sur ta chaine.
Ainsi on aura :

public string ChercheChaineEntre(string orig, string debut, string fin) {
    // on construit l'expression régulière en fonction
    // des paramètres passés
    string pattern = string.Format("(?:{0})(.*?)(?:{1})", debut, fin); // on utilise ?: pour ne pas récupérer le résultat à la fin
  
    // on instancie un objet Regex
    Regex regex = new Regex(pattern, RegexOptions.Singleline);

    return regex.Match(orig).Value;
}

voila :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Regex.Replace [ par GuinaweK ] Bonsoir,j'aurai voulu savoir s'il était possible de remplacer une expression régulière par une autre expression régulière. En pratique, j'essaye de pa Remplacement de caractères spéciaux [ par alphacrash ] Voilà une fonction convertir_special() que j'utilise comme ceci: textbox5.text=convertir_special(titre), titre étant une chaine vous vous en doutez.Lo Problème de regex avec requête ... [ par alphacrash ] Salut, voilà mon problème:Je parse une chaine comprenant des balises telles que &lt;img43|left&gt; où 43 est un identifiant utilisé dans la base de do regex date [ par baldemic ] Bonjour,Je souhaiterai formater (en une seule opération) une date : 08/11/2008 08:33:25 en 08-11-2008 08h33m25 à l'aide d'une expression régulière.Je C# Replace [ par cybers7119 ] Bonjour à tous,Je suis en train d'essayer de lire des données dans un fichier texte, de modifier leur formalisme et de les réécrire ensuite dans un au C# - Expression Régulière [ par skyline86 ] Bonjour,Je cherche à faire une expression régulière qui permet de vérifier que l'utilisateur insère uniquement [A-Z] et [0-9] avec en plus des espaces [Regex] Récupérer une chaine de caractère [ par 4rocky4 ] Bonjour tout le monde,Je viens de découvrir les expressions régulières et j'aurais besoin d'aide J'ai un fichier (fichier.sql) qui contient un très gr interface graphique [ par medinfo87 ] Regex regEmail = new Regex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");bon,svp, je veux savoir l Besoin d'aide sur une Regex [ par 4rocky4 ] doublon dans combobox [ par francouas ] Bonjour j'ai une combobox a remplir et je voudrais eviter les doublons avec contains de la collection items j'ai un debut de réponse quelqu'un m'aide


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.