С# 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)