С# Regex соответствует чему-либо внутри круглых скобок

Я хочу сопоставить что-либо внутри круглых скобок, но результат также должен исключать круглые скобки.

Примеры:
Инициализировать (P90W)
Тормозить (45X)

Результат:
990 Вт
45X

запишите результаты без скобок.

Я пытался сделать эту работу, но безрезультатно. Я пробовал несколько вариантов, но я знаю, что мне не хватает простой вещи, и я не хочу использовать «Заменить» для ее достижения.

var item = "Brake(45X)"
Regex searchTerm = new Regex(@"\((.*)\)");
var value = (searchTerm.Match(item).Groups.Count > 0) ?
    searchTerm.Match(item).Groups[0].Value : string.Empty;

person Michael D. Irizarry    schedule 15.12.2011    source источник
comment
Я не знаю C#, но считается ли new Regex() базовым, расширенным или PREG? Вы пробовали переключать, какой набор скобок экранируется обратной косой чертой? Возможно, \( означает отметку начала диапазона, а ( — буквальную скобку?   -  person ghoti    schedule 16.12.2011
comment
Мне кажется, это нормально, что происходит? value это string.Empty?   -  person Sean Bright    schedule 16.12.2011
comment
значение возвращается (P90W) или (45X) со скобками.   -  person Michael D. Irizarry    schedule 16.12.2011


Ответы (4)


Некоторые люди обвиняют меня в постоянном использовании утверждений нулевой ширины:

resultString = Regex.Match(subjectString, @"(?<=\().+?(?=\))").Value;

Но они делают именно то, что вы хотите. Не захватывайте то, что вы не хотите захватывать.

person FailedDev    schedule 15.12.2011
comment
Зачем нужен просмотр вперед и назад? @"\(([^\)]*)\)" намного проще и на 4 символа короче :) - person kol; 16.12.2011
comment
Это здорово, комментарий Коля тоже великолепен, но я скажу, что ответ FailedDev научил меня делать то, чего я раньше не знал. - person Feign; 10.02.2015
comment
10 лет спустя, но с комментарием от @kol вам нужно использовать Regex.Match(...).Groups[1], что не относится к ответу от @FailedDev - person zg303; 30.06.2021

попробуйте регулярное выражение @"\((.*?)\)"

РЕДАКТИРОВАТЬ: также результатом будет группа 1, а не 0, группа 0 должна содержать весь результат регулярного выражения, а не первое значение в скобках

person Matthew    schedule 15.12.2011
comment
Полезный! Мне нужно было найти все части строки внутри фигурных скобок, поэтому я использовал этот простой код: string pattern = @{(.*?)}; MatchCollection соответствует = Regex.Matches(text, pattern); - person Stefano; 17.07.2013

Удалите внутреннюю скобку и повторите попытку:

new Regex(@"(\([^\)]+\))");

Когда вы не избегаете скобок в регулярном выражении, если вы используете групповое совпадение, оно возвращает только содержимое скобок. Итак, если у вас есть new Regex(@'(a)(b))', совпадение 1 будет a, а совпадение 2 будет b. Совпадение 0 — это полное совпадение.

person Savas Vedova    schedule 15.12.2011
comment
Один комментарий, если вы хотите слишком пустую скобку: (([^)]*)) - person Dani; 31.01.2018

попробуй это:

var pattern = @".*public.*(.*\(.*\))";
Regex.Matches(input,pattern)
person oguzh4n    schedule 05.08.2015