Regex exclure une chaine de caracteres

Signaler
Messages postés
3
Date d'inscription
mercredi 7 avril 2010
Statut
Membre
Dernière intervention
9 janvier 2011
-
psikopit
Messages postés
3
Date d'inscription
mercredi 7 avril 2010
Statut
Membre
Dernière intervention
9 janvier 2011
-
Bonjour à tous ;)
Je suis débutant en python et j'essaie de faire un code tout simple qui matche les **En gras** d'un texte pour les remplacer par des En gras html :)
Jusque la rien de compliquer j'utilise ce code python/regex:
line = re.sub('(\*\*)([^*]+)(\*\*)','\\2',line)

Cela fonctionne très bien sauf si l'on écrit **Le texte en * gras**
Le code ne match plus les ** cela vient du [^*]+ (cela veut bien dire n'importe quel caractère sauf *?) le problème est qu'il faudrait exclure la chaine ** et non * mais je 'y parvient pas :/ merci de votre aide :)

P.S.: c'est moitier python/regex alors je ne sais pas trop où poster :/

2 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
ta regexp est trop gourmande (greedy)

te manque un ? pour la rendre ungreedy (non -gourmande) :

\*\*(.+?)\*\*

du coup, .+ essaiera de récupérer le moins de caractères possibles...


selon le type d'entrées que tu as, remplaces . par [\s\S] si besoin

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
3
Date d'inscription
mercredi 7 avril 2010
Statut
Membre
Dernière intervention
9 janvier 2011

corp = re.sub('\*\*([\s\S]+?)\*\*','\\1 ',corp)

Merci de ta réponse :D et excuse moi de la mienne tardive :/
J'ai fini par écrire sa et cela fonctionne a merveille
Je n'avais jamais entendu parlé de chaines greedy^^ maintenant je n'oublierai pas :)