20

I want to match anything inside parentheses but the result must exclude the parentheses as well.

Examples:
Initialize(P90W)
Brake(45X)

Result:
990W
45X

note results without the Parentheses.

I've been trying to make this work but to no avail I tried a few variations but I know it's a simple thing I'm missing and I don't want to go using Replace to achieve it.

var item = "Brake(45X)"
Regex searchTerm = new Regex(@"\((.*)\)");
var value = (searchTerm.Match(item).Groups.Count > 0) ?
    searchTerm.Match(item).Groups[0].Value : string.Empty;
Michael D. Irizarry
  • 6,186
  • 5
  • 30
  • 35
  • I don't know C#, but is a `new Regex()` assumed to be Basic, Extended, or PREG? Have you tried switching which set of brackets are escaped with backslashes? Perhaps `\(` means "mark start of range" and `(` is a literal paren? – ghoti Dec 15 '11 at 20:36
  • This looks fine to me, what is happening? `value` is `string.Empty`? – Sean Bright Dec 15 '11 at 20:37
  • value is returning (P90W) or (45X) with the parentheses. – Michael D. Irizarry Dec 15 '11 at 20:38

5 Answers5

42

Some people accuse me of using zero width assertions all the time:

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

But they do exactly what you want. Don't capture what you don't want to capture.

FailedDev
  • 26,680
  • 9
  • 53
  • 73
  • 6
    Why do you need lookahead and lookbehind? `@"\(([^\)]*)\)"` is much simpler, and 4 characters shorter :) – kol Dec 15 '11 at 22:41
  • This is great, kol's comment is great as well, but I will say that FailedDev's answer taught me to do something I didn't know before – Feign Feb 10 '15 at 16:27
  • 10 years later but with the comment from @kol you need to use `Regex.Match(...).Groups[1]` which is not the case with the answer from @FailedDev – zg303 Jun 29 '21 at 21:42
12

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

EDIT: Also the result will be group 1 not 0, group 0 should contain the entire regex result, not the first parenthesized value

Matthew
  • 24,703
  • 9
  • 76
  • 110
  • Useful! I needed to find all string parts inside curly brackets, so used this simple code: string pattern = @"{(.*?)}"; MatchCollection matches = Regex.Matches(text, pattern); – Stefano Jul 17 '13 at 09:26
3

Remove the inner paranthesis and try again:

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

When you do not escape paranthesis in regex, if you are using group match it will only return the content within the paranthesis. So if you have, new Regex(@'(a)(b))', match 1 will be a and match 2 will be b. Match 0 is the entire match.

Savas Vedova
  • 5,622
  • 2
  • 28
  • 44
0

try this:

var pattern = @".*public.*(.*\(.*\))";
Regex.Matches(input,pattern)
oguzh4n
  • 682
  • 1
  • 10
  • 29
0
Regex searchTerm = new Regex(@"\(([^\)]*)\)");
kol
  • 27,881
  • 12
  • 83
  • 120