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 Obsidian . Évalué à 2.
:%s/[^\\]*\(\\line\|\\par\)\?\|.*/\1/g
[^] # Re: Faire l'inverse
Posté par anahop . Évalué à 1.
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 err404 (site web personnel) . Évalué à 1.
# Re: regexp sauf...
Posté par Jacques L'helgoualc'h (site web personnel) . Évalué à 1.
# zero-width negative look ahead
Posté par duaner . Évalué à 1.
\\(?!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.