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 : 12 796

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 [C#] Expressions régulières RegEx [ par scoubidou944 ] Bien pratique mais c'est un peu du chinois parfois ;pSi on a des paramètres séparés par des virgules (,) mais que parfois certains ont en plus un espa Regex [ par Bidou ] Bonjour,Décidemment, les regex c'est pas mon truc ;-)J'aimerais utiliser une expression régulière pour supprimer les doublons ou plus (il s'agit de ch Optimiser une regex de 10 secondes ? [ par gomoz ] Bonjour,je connais assez mal les regex et je cherche un moyen d'optimiser cette requete :Regex   post_quote = new Regex(@"&lt;textarea.*&gt;(?&lt;text regex pour balises xml et html [ par romagny13 ] Bonjour,quelquun aurait t'il une bonne expression reguliere pour trouver les balises HTML ou XML ?je cherches pas tres complique la mais jai juste un regex recherche * [ par NX06 ] Bonjour,Je souhaiterai touver l'astuce pour utiliser regex, je m'explique :la chaine recherché est ceci : rolala toto="tatatiti"  tututete tata feypto Encore un problème de Regex ! [ par yanis7518 ] Salut à tous.Je dois remplacer dans une string du type "IN" par "1" seulement si cette string n'est pas suivie par des voyelles (A, E, I, O, U, Y). J' Regex tout ce qui se trouve entre les balises... [ par medicair ] Bonjour, le regex suivant me retourne vrai pour toutes les balises script y compris leurs contenu d'une page .&lt;script[^&gt;]*&gt;(.|\n)*?&lt;/scrip


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,296 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é.