2010-04-30 5 views
2

Je veux juste extraire le texte entre les parenthèses - pas les parenthèses, aussi!Regex pour extraire une chaîne entre deux délimiteurs SANS renvoyer également les délimiteurs?

Mon code ressemble actuellement à ceci:

var source = "Harley, J. Jesse Dead Game (2009) [Guard]" 

// Extract role with regex 

m = Regex.Match(source, @"\[(.*)\]"); 
var role = m.Groups[0].Value; 
// role is now "[Guard]" 

role = role.Substring(1, role.Length-2); 
// role is now "Guard" 

Pouvez-vous me aider à simplifier à un seul regex, au lieu de l'expression régulière, puis la sous-chaîne?

Répondre

5

vous utilisez un numéro de groupe différent. Chaque fois que vous envelopper quelque chose dans(), il en crée un nouveau groupe. Le groupe zéro est l'expression trouvée entière. group1 est le premier groupe de(), group2 est le second, etc. Puisque vous utilisez le groupe 0, il renvoie la chaîne entière qui correspond à l'expression

Essayez de remplacer Groups [x] par 1 et voyez ce que ça donne toi.

+0

merci beaucoup :) –

0

Vous pouvez utiliser préanalyse zéro largeur (?=) et lookbehind (?<=) assertions:

m = Regex.Match(source, @"(?<=\[).*(?=\])"); 
var role = m.Value; 
  • assertion avant positive, zéro largeur: correspond à un suffixe, mais il exclut de la capture
  • Zéro -width positive lookbehind assertion: correspond à un préfixe mais l'exclut de la capture

Voir Grouping Constructs sur MS DN pour plus de détails.

Questions connexes