2010-10-11 6 views
0

lignes Étant donné qui ressemblent à ce qui suit:
Blah \cite[9.1173]{Joyce:1986aa}\autocite[42]{Kenner:1970ab}\autocite[108]{Hall:1960aa} bbb.\n
Je voudrais supprimer le deuxième (et toute modification ultérieure) apparition de \autocite, ce qui dans ce qui suit:
Blah \autocite[9.1173]{Joyce:1986aa}[42]{Kenner:1970ab}[108]{Hall:1960aa} bbb.\nComment supprimer la répétition chaîne non adjacents

J'ai du mal à exprimer cela sous forme de regex (j'utilise le module RE python 2.7), cependant, comme je ne suis pas sûr comment formuler "supprimer seulement la deuxième et les occurrences suivantes de \autocite quand suivi par […]{…}, jusqu'à ce qu'un espace ou une période soit rencontré ".

Répondre

3

Les expressions régulières ne sont pas une panacée.

l = s.split('\\autocite') 
print '%s\\autocite%s' % (l[0], ''.join(l[1:])) 
+0

+1 Nice. Des marteaux et des vis me viennent à l'esprit. – djna

+0

Vous avez absolument raison. Impossible de voir le bois pour les arbres. – urschrei

0

Si vous voulez absolument vous pouvez utiliser regexes (?<=\\autocite)(.*?)\\autocite(.*) et le remplacer par \1\2.

Mais la réponse de @Ignacio Vazquez-Abrams est bien meilleure et efficace.

Questions connexes