C # Regex сопоставить что-либо в скобках - PullRequest
17 голосов
/ 16 декабря 2011

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

Примеры:
Инициализация (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;

Ответы [ 5 ]

33 голосов
/ 16 декабря 2011

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

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

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

11 голосов
/ 16 декабря 2011

try regex @"\((.*?)\)"

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

3 голосов
/ 16 декабря 2011

Удалите внутренний паразит и попробуйте снова:

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

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

0 голосов
/ 06 августа 2015

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

var pattern = @".*public.*(.*\(.*\))";
Regex.Matches(input,pattern)
0 голосов
/ 16 декабря 2011
Regex searchTerm = new Regex(@"\(([^\)]*)\)");
...