2009-06-25 8 views
1

Je suis en train de convertir une documentation LaTeX en texte restructuré et d'avoir des problèmes avec une expression régulière dans Visual Studio 2003. J'essaie de convertir \ emph {text} au texte * en utilisant la découverte suivante/remplacer les chaînes:Problème avec le remplacement d'expression régulière dans Visual Studio 2003

\\emph\{([^\}]*)\} 

*\0* 

Cependant, en utilisant cette paire je reçois \ emph {texte} converti en * \ emph {texte} * qui n'a pas été ce que je pensais. Quand j'utilise * \ 1 * au lieu de * \ 0 * j'obtiens ** comme résultat de remplacement.

Qu'est-ce qui me manque ou que ne comprends-je pas sur les règles de regroupement?

Merci.

+0

Pouvez-vous poster un exemple de ligne de texte juste pour être sûr? –

+0

Je ne suis pas sûr de ce que vous voulez dire. –

+0

Vous essayez de faire correspondre une ligne et de la remplacer par autre chose. Pouvez-vous poster une ligne d'échantillon? –

Répondre

3

Je pense que dans la syntaxe de remplacement VS regex, \ 0 correspond à la chaîne entière, alors que \ 1 correspond au contenu de la première variable capturée (\ 2 étant la deuxième et ainsi de suite). Par conséquent:

\ 0

Cependant, en utilisant cette paire je reçois \ emph {texte} converti en * \ emph {texte} * qui n'a pas été ce que je pensais.

Confirmant ainsi, \ 0 correspond à toute la chaîne correspondante.

Lorsque j'utilise * \ 1 * au lieu de * \ 0 *, j'obtiens ** comme résultat de remplacement.

Il est probable que vous ne correspondez à rien dans la classe de capture.

Pour plus de détails, la syntaxe de définition d'une classe de capture (appelée expression étiquetée dans the docs) utilise les accolades {}, pas les parenthèses() comme vous utilisez ici. Probablement cela fonctionnera comme l'expression "trouver":

\\emph\{{[^\}]*}\} 
+0

Ah ... que est exactement le problème. Merci beaucoup. –

Questions connexes