Forum Programmation.perl expression rationnelle particuliere

Posté par  .
Étiquettes : aucune
0
15
juin
2007
bonjour,

J'essaie de construire une expression qui, dans une chaine de caractere, supprime tous les motif du style \suite_de_caractere sauf les \line et \par.

Y a-t-il une regexp qui permet de supprimer des motifs sauf cas particuliers ??


merci de votre aide.
  • # Faire l'inverse

    Posté par  . Évalué à 2.

    Pas tout-à-fait au point, mais presque, sous vi :

    :%s/[^\\]*\(\\line\|\\par\)\?\|.*/\1/g
    • [^] # Re: Faire l'inverse

      Posté par  . Évalué à 1.

      Bonne idée.

      En gros le principe est de construire deux expressions régulières :
      une EXPR1 qui matche les exceptions et une EXPR2 qui matche le cas général.

      Ici ca donnerait : EXPR1: \\line\|\\par
      et EXPR2 : \\[a-zA-Z]*

      et ensuite on fait une opération de substitution (avec sed ou vi)
      s/ \( EXPR1\) \| EXPR2 / \1/g (j'ai rajouté des espaces pour la lisibilité)

      par ex avec sed :

      sed 's/\(\\line\|\\par\)\|\\[a-zA-Z]*/\1/g'

      Si le texte contient \toto, ça matche EXPR2 et c'est supprimé (car \1 ne 'contient' alors rien) et si le texte contient \line (ou \par) ça matche EXPR1 et c'est remplacé par lui même (donc conservé).

      En fait \line matche aussi EXPR2, mais sed prend le premier 'match' possible. Par contre ça marche plus si on intervertit EXPR1 et EXPR2 :
      sed 's/\\[a-zA-Z]*\|\(\\line\|\\par\)/\1/g'
  • # kregexpeditor

    Posté par  (site web personnel) . Évalué à 1.

    c'est un petit outil qui permet d'ecrire des regexp.
  • # Re: regexp sauf...

    Posté par  (site web personnel) . Évalué à 1.

    Bonjour.
    • Il existe une commande untex...
    • Les regexps ne sont pas très commodes pour la négation ; le plus simple est de maquiller les deux commandes à conserver :
      perl -pe 's/\\(line|par)\b/_GLOP_$1/g;s/\\([a-z]+|.)//ig;s/_GLOP_/\\/g'
      
      si _GLOP_ ne figure pas dans le texte. La substitution
      s/\\([a-z]+|.)//ig
      
      détruit toutes les commandes (La)TeX, mais il restera des arguments.
  • # zero-width negative look ahead

    Posté par  . Évalué à 1.

    Quelque jours en retard, mais bon :)

    \\(?!line|par)\w+

    ... Remplacer le \w+ par ce qui doit réellement suivre le '\'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.