Remplacer un bout d'une chaine de caractère compris entre 2 mots
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
1 déc. 2005 à 02:22
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
17 déc. 2005 à 01:18
Bonjour,
Je cherche comment remplacer un bout d'une chaine de caractères compris entre 2 mots par une autre chaine de caractères. Par exemple si j'ai la chaine de caractère suivante :
fdhkj ghkf ghhg kdfjhg kjfhkj hjkf hjk début bout de chaine à remplacer fin g fdhgdkyguidgyufidgy iudfygui
je voudrais la remplacer par :
fdhkj ghkf ghhg kdfjhg kjfhkj hjkf hjk début nouveau bout de chaine fin g fdhgdkyguidgyufidgy iudfygui
J'ai l'impression qu'il va falloir que j'utilise la classe regex, mais je ne vois pas comment...
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 1 déc. 2005 à 15:11
Il y deux trucs que je ne comprends pas dans ton code :
tout d'abord que signifie :
string pattern = string.Format("({0})(.*)({1})", debut, fin);
plus précisement, je ne comprends pas ce que signifie : "({0})(.*)({1})".
Plus généralement, j'ai toujours du mal à trouver ce que sont les paramètres des propriétés. Sur msdn, je ne trouve pas souvent ce que je cherche. aurais-tu une adresse qui liste les propriétés, méthodes, classes ? Ici c'est format qui me pose problème.
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 1 déc. 2005 à 18:21
Excuse moi, j'ai un peu raté mon coup...
Je ne comprends pas trop ce que tu veux dire par : "remplir" les espaces que tu laisses avec les {0}...
Sinon il n'existe pas des solutions du coté de la méthode read ? Lire une chaine de carctère jusqu'à un certain mot (dans notre cas début), la relire à partir d'un autre mot (dans notre cas fin) et inserer entre les 2 notre chaine de caractère de remplacement. On stockerais le tout dans un variable string. Est-il possible de lire un chaine de caractères jusqu'à un certain mot/ou à partir d'un certain mot?
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 1 déc. 2005 à 19:16
Tu exagères concernant la méthode Format de la classe String, je t'ai donné le lien vers la msdn tu pourrais lire
concernant la lecture séquentielle de la chaine... oui c'est faisable mais super long... alors que l'expression régulière est très rapide pour ce genre de travail.
J'ai cependant éxécuté ton bout de code (que j'ai un peu modifiécar Visual Studio n'appréçie pas quand je le met directement dans static
void Main(
string[] args) (au passage je précise que l'ai mis ça dans une console application)) :
string s =
"";
string orig =
" vhjhdfjghkjdg hfkjdhkj debut df sjhfjdg hfgdhjhgj fin fshdu f dshgjj";
Regex regex =
new
Regex(pattern,
RegexOptions.Singleline);
s = regex.Replace(orig,
"$1" + remplacement +
"$3");
Console.Out.WriteLine(s);
En
débugant, j'ai tout de même compris quelques petites chôses (enfin j'éspère...)
Visiblement : le {0} est remplacé par la chaine placée en deuxièmeparamètre de format
le {1}est remplacé par la chaine placée en troisième paramètre de format
puis "$1","$2" et "$3" doivent renvoyer aux chaines "debut", "fin" et à ce qu'il y a entre les deux
le (.*) doit représenter la chaine de caractère (peu importe sa valeur) compris entre debut et fin. D'habitude on met une * non ? Là j'ai essayé mais à priori ça ne marche pas.
ikaemos
Messages postés9Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention 4 décembre 2005 4 déc. 2005 à 15:42
Comment ça ? je fais une opération de moins pourtant. Tu veux dire que le "Format" optimise l'expression régulière ? (je sais je suis lourd, j'veux juste comprendre mon erreur :D)
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 4 déc. 2005 à 16:42
Ok merci pour les conseils sebmafate . Il y a plus qu'un truc que je ne comprends pas (enfin je crois). Je n'arrive pas à comprendre où est-ce qu'on insère des bouts de code comme le tient ( c'est à dire des trucs commençant par public, private,...), par exemple dans une console application (j'en suis encore là... il me reste beaucoup à apprendre). Ma question doit te paraitre un peu ridicule, mais je n'ai toutjours pas réussi à le placer correctement sans que ça génère d'erreur..
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 6 déc. 2005 à 14:24
Encore un autre petit problème :si j'ai une chaine de caractères du style :
vhjhdfjghkjdg hfkjdhkj debut df sjhfjdg hfgdhjhgj fin fshdu f dshgjj fin
Comment choisir si l'on remplace le texte compris entre debut et le premier fin ou entre debut et le deuxième fin ?
Avec le code que tu m'as donné, ce qui est remplaçé est le texte compris entre debut et le deuxième fin.
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 6 déc. 2005 à 14:41
Le point ? signifie que l'on prend la première occurence de fin ?
Et si maintenant j'ai 3 fin et que je veux prendre le deuxième comme limite pour la fin du bout remplaçé, comment faire ?
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 17 déc. 2005 à 01:18
C'est embettant car j'ai dans mon fichier plusieurs debut ...fin. Je voudrais remplacer chaque occurence par des strings que j'ai stockées dans un tableau. Voici un exemple qui illustre ce que je veux faire :
string[] t={"string_1","string_2",...,"string_n");
for (int i =0; i<=t.Length-1;i++)
{
remplacer le (i+1)ème texte compris entre debut et fin par t[i]
}