Regex для чего-либо между [] - PullRequest
       6

Regex для чего-либо между []

6 голосов
/ 09 сентября 2010

Мне нужно найти регулярное выражение для []

Например, если строка - Привет [Stack], вот мой [Tag], который мне нужно [Find].

должно вернуться Стек, Метка, Найти

Ответы [ 4 ]

27 голосов
/ 09 сентября 2010

Довольно просто, вам просто нужно (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);
}
3 голосов
/ 09 сентября 2010

В зависимости от того, что вы имеете в виду:

\[([^\]]+)]
3 голосов
/ 09 сентября 2010
\[([\w]+?)\]

должно работать.Возможно, вам придется изменить соответствующую группу, если вам нужно также включить специальные символы.

0 голосов
/ 01 декабря 2017

.NET-синтаксис с учетом нескольких встроенных скобок:

\[ ( (?: \\. | (?<OPEN> \[) | (?<-OPEN> \]) | [^\]] )*? (?(OPEN)(?!)) ) \]

Подсчитывает количество открытых [ секций в OPEN и завершается успешно, только если OPEN равно 0 в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...