Expression reguliere

Résolu
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 - 6 juil. 2006 à 16:35
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 7 juil. 2006 à 10:10
Bonjour,

est il possible avec une expression reguliere de modifier du texte mis entre des balise comme ceci :

<!--BALISE-->Texte ICI<!--FINBALISE-->

Je voudrai modifier le Texte ICI

Est-ce possible ?

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net

10 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 juil. 2006 à 18:48
Euh je crois que si...
Voilà une méthode que j'avais faite pour retrouver le text entre deux balises... à toi de l'adapter pour qu'on  puisser modifier le text et pas seulement le lire :

public static Match GetStringBetween(string txt, string start, string end, string groupName)
{
         string pattern = string.Format("({0})(?<{2}>.*?)({1})", start, end, groupName);
         return Regex.Match(txt, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
}

<hr size="2" /> VC# forever
=13319
3
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
7 juil. 2006 à 09:40
Grace a toi je me suis fait ma petite fonction qui me retourne le string contenu entre les balises, donc je n'ai plus qu'a faire un replace des balise plus le texte trouvé.

Voici mon bout de code :

static
void Main(
string[] args)
{

string text =
"qsdfbhqjsdvcksjbdo
<!--TEST-->ICI<!--FINTEST-->s<mdnvklqsdvsdnlk<sndvl";

string start =
"<!--TEST-->";

string end =
"<!--FINTEST-->";

string groupName =
"test";
string Value Reg_Exp(text, start, end, groupName);text text.Replace(

"<!--TEST-->" + Value +
"<!--FINTEST-->",
"<!--TEST-->REMPLACER<!--FINTEST-->");
}

static
string Reg_Exp(
string Text,
string Balise1,
string Balise2,
string groupName)
{

string pat =
string.Format(
"({0})(?<{2}>.*?)({1})", Balise1, Balise2, groupName);

Regex r =
new
Regex(pat,
RegexOptions.IgnoreCase);

Match m = r.Match(Text);

Group g = m.Groups[3];

CaptureCollection cc = g.Captures;

Capture c = cc[0];

return
Convert.ToString(c);
}

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 juil. 2006 à 09:59
Tu peux faire un peu plus simple quand même, je ne sais plus pourquoi j'avais mis cette histoire de groupe en paramètre. Bref, tu ne sembles pas en avoir besoin dans ton cas, donc on aurait plutôt ceci :

private
string Reg_Exp(
string Text,
string Balise1,
string Balise2,
string groupName
{
  
string pat =
string.Format(
"({0})(?<{2}>.*?)({1})", Balise1, Balise2, groupName);
  
Regex r =
new
Regex(pat,
RegexOptions.IgnoreCase);
  
return r.Match(Text).Groups[groupName].Value
}

<hr size="2" /> VC# forever
=13319
3
gcorbineau Messages postés 143 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 25 octobre 2006
6 juil. 2006 à 16:49
il faut que tu passe par une autre chaine de caractere. pour pouvoir modifier le texte.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
6 juil. 2006 à 16:53
Ca n,e marche pas en expression regulaire comme en PHP ?

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net
0
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
7 juil. 2006 à 09:02
Ok, tu pourrait me donner un exemple de ton code car la je vois pas trop ;)

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 juil. 2006 à 09:28
string imgUrl = Helpers.GetStringBetween(pageContent, @"width=""100%"" align=""center"">\r\n", "imgUrl").Groups["imgUrl"].Value;

  - pageContent, c'est tout un text (par exemple, tout le contenu d'un fichier)
Ensuite, je mets les deux bornes (je veux le texte qui se trouve entre ces deux textes)
  - @"width=""100%"" align=""center"">\r\n"
  - imgUrl, c'est le nom du groupe. J'en avais besoin (je ne sais plus pourquoi) mais ça ne sera pas forcément ton cas, donc tu peux faire la fonction en enlevant ce paramètre je pense...

Y'a peut-être plus simple, à vrai dire que je ne suis pas un spécialiste des expressions régulières. En tout cas, ça marche...

<hr size="2" /> VC# forever
=13319
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 juil. 2006 à 10:05
Encore mieux en fait :

private
void Test()
{
  
string text =
"qsdfbhqjsdvcksjbdo
<!--TEST-->ICI<!--FINTEST-->s<mdnvklqsdvsdnlk<sndvl";
  
string start =
"<!--TEST-->";
  
string end =
"<!--FINTEST-->";
  
string value = Replace(text, start, end)
}

private
string Replace(
string Text,
string Balise1,
string Balise2)
{
  
string pat =
string.Format(
"({0})(.*?)({1})", Balise1, Balise2);
  
return
Regex.Replace(Text, pat,
"REMPLACER",
RegexOptions.IgnoreCase)
}

<hr size="2" /> VC# forever
=13319
0
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
7 juil. 2006 à 10:05
Merci pour l'optimisation ca va mieux maintenant. Je developpe normalement en PHP donc le c# c'est juste un passe temps ;)

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 juil. 2006 à 10:10
Peut-être qu'on peut faire encore mieux, comme je te l'ai dit, les expressions régulières ça jamais été trop ma tasse de thé

<hr size= "2" /> VC# forever
=13319
0
Rejoignez-nous