Довольно просто, вам просто нужно (1) снять скобки с обратной косой черты и (2) использовать (.*?)
для захвата содержимого.
\[(.*?)\]
Скобки - это группа захвата, они захватывают их содержимое для дальнейшего использования. Знак вопроса после .*
делает сопоставление не жадным. Это означает, что он будет соответствовать как можно более короткому совпадению, а не самому длинному. Разница между жадным и не жадным возникает, когда у вас есть несколько совпадений в строке:
Hi [Stack], Here is my [Tag] which i need to [Find].
^______________________________________________^
Жадное совпадение найдет самую длинную возможную строку между двумя наборами квадратных скобок. Это не правильно. Нежадный матч найдет самое короткое:
Hi [Stack], Here is my [Tag] which i need to [Find].
^_____^
В любом случае код в конечном итоге будет похож на :
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);
}