11
votes

Regex pour quoi que ce soit entre []

J'ai besoin de trouver la regex pour []

Pour par exemple, si la chaîne est - HI [Stack], voici ma [tag] que j'ai besoin de [trouver].

Il devrait retourner Stack, tag, trouver


3 commentaires

Sur quelle plate-forme? Dans quel langage de programmation?


ASP.NET. J'utilise Regex.Amatch ()


Peut-il y avoir des matchs imbriqués: foo [bar [Baz]] effectué où vous souhaitez saisir bar [baz] ? Ou peut-être foo [bar \\] baz] effectué où vous souhaitez saisir bar] baz ? Peut-il y avoir de nouvelles lignes entre [ et ] ?


5 Réponses :


42
votes

assez simple, vous avez juste besoin de (1) échapper aux supports avec des barres obliques backslashes, et (2) utilisez (. *?) code> pour capturer le contenu.

string regex = @"\[(.*?)\]";
string text  = "Hi [Stack], Here is my [Tag] which i need to [Find].";

foreach (Match match in Regex.Matches(text, regex))
{
    Console.WriteLine("Found {0}", match.Groups[1].Value);
}


0 commentaires

3
votes
\[([\w]+?)\]
should work. You might have to change the matching group if you need to include special chars as well.

1 commentaires

Cela fonctionne un peu plus bien que la réponse actuellement marquée, car elle permet de mieux contrôler des choses comme ceci: «Testez [Test] [Test] [Test]« La réponse étiquetée comprendra la STRAY [dans le match, tandis que cette regex ne sera pas.



3
votes

Selon quel environnement vous voulez dire:

\[([^\]]+)]


3 commentaires

Ah, .net ... c'était une regex d'Emacs. :-)


Je pense que vous avez manqué un ] même dans la syntaxe EMACS.


J'ai pris la liberté de le changer en un .Net compatible. Notez que le ] ne doit que s'échapper à l'intérieur du jeu de caractères, pas en dehors de celui-ci (bien que cela ne fait pas mal de s'échapper ...).



0
votes

syntaxe .NET, prenant soin de plusieurs supports incorporés:

\ [((((?: \\. | (? \ [) | (? <- Ouvrir> \ \]]) | (? (OUVERT) (? !)))) \]

Ceci compte le nombre de sections d'ouverture [ dans Ouvrir et ne réussit que si Ouvrir est 0 à la fin.


0 commentaires

0
votes

J'ai rencontré un problème similaire et j'ai découvert que cela fait aussi l'astuce.

\[\w{1,}\]


0 commentaires