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

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

Примеры:
Initialize (P90W)
Тормоз (45X)

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

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

попробуйте regex @"\((.*?)\)"

EDIT: также результатом будет группа 1, а не 0, группа 0 должна содержать весь результат регулярного выражения, а не первое значение в скобках

Ответ 3

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

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

Если вы не избежите paranthesis в регулярном выражении, если вы используете групповое совпадение, оно вернет только содержимое в пределах paranthesis. Итак, если у вас есть, new Regex(@'(a)(b))', совпадение 1 будет равно а, а совпадение 2 будет b. Матч 0 - это весь матч.

Ответ 4

Regex searchTerm = new Regex(@"\(([^\)]*)\)");

Ответ 5

попробуйте следующее:

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