2010-10-28 9 views
1

Supposons que je le texte suivant:expression régulière aide

« quelque chose [234] [3243] »

Je suis en train de tirer les valeurs entre les crochets. Je suis venu avec l'expression regex suivante: .*\[(.*)\].* mais cela me permet seulement de tirer la dernière valeur entre les parenthèses, dans cet exemple 3243. Comment puis-je tirer toutes les valeurs, ce qui signifie obtenir plus de groupes dans mon objet Match.

Répondre

3
 string s = "something[234][3243]"; 
     MatchCollection matches = Regex.Matches(s, @"(?<=\[)\d+(?=\])"); 
     foreach (Match m in matches) 
     { 
      Console.WriteLine(m.Value); 
     } 

Vous pouvez le faire avec le regroupement parens, mais si vous utilisez le regard en arrière et regarder en avant, alors vous ne besoin de sortir les groupes du match.

0

Vous pouvez essayer:

\[(.*?)] 
3

Si des chiffres sont autorisés entre les parenthèses, utilisez

\[(\d+)\] 

et utiliser the .Matches method pour obtenir tous matchs.

var theString = "something [234][3243]"; 
var re = new Regex(@"\[(\d+)\]"); 
foreach (Match m in re.Matches(theString)) { 
    Console.WriteLine(m.Groups[1].Value); 
} 

(sinon des chiffres sont autorisés, utilisez \[([^]]+)\] à la place.)

1

Si vous souhaitez rechercher une chaîne entre crochets et pas uniquement des chiffres, vous pouvez faire le patron du groupe paresseux (en ajoutant ?) et faire:

\[(.+?)\]

Puis itérer tous les correspondances pour atteindre tout le contenu du support (contenu dans le groupe de capture). Comme quelqu'un l'a dit, si vous ajoutez le look-ahead et le look-behind, le match sera sans parenthèses.

0

Je sais que ce n'était pas une question JavaScript, mais voici comment le faire dans JS, puisque je ne connais pas beaucoup de C#. Ceci n'utilise pas lookahead ou lookbehinds et ne correspond à rien à l'intérieur des parenthèses, pas seulement les nombres

var reg = /\[(\d+)\]/g; 
var reg = /\[([^\]]+)\]/g; 
var str = "something [234] [dog] [233[dfsfsd6]"; 

var matches = []; 
var match = null; 
while(match = reg.exec(str)) { 
    // exec returns the first match as the second element in the array 
    // and the next call to exec will return the next match or null 
    // if there are no matches 
    matches.push(match[1]); 
} 

// matches = [ "234", "dog", "233[dfsfsd6" ]