Remplacer une chaine comprise entre 2 bornes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 650 fois - Téléchargée 25 fois

Contenu du snippet

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 / Exemple :


/// <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);
	}
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
mardi 12 octobre 2010
Statut
Membre
Dernière intervention
25 janvier 2011

Bonjour,
Merci pour cette solution...
En utilisant la fonction RemplaceChaineEntre j'ai une erreur
lorsque je cherche à remplacer une chaine entre deux bornes du type
borne 1 : "/*"
borne 2 : "*/"
Quelqu'un peut-il m'expliquer comment comment l'adapter le code ?
Ex de chaine :
"/* mon commentaire (SQL par exemple) puis ma requete */
SELECT FROM WHERE
/* un autre commentaire */ "

Valeur attendue : SELECT FROM WHERE
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
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 :)
Messages postés
1
Date d'inscription
samedi 2 avril 2005
Statut
Membre
Dernière intervention
8 août 2006

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 ?
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
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}
Messages postés
4
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
8 janvier 2006

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"

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.