My string looks like this:

```
(left.e0_coefficient*right.Scalar) e₀ + (left.e1_coefficient*right.Scalar) e₁ + (left.e2_coefficient*right.Scalar) e₂ + (left.e3_coefficient*right.Scalar) e₃
```

I want to get the expression thats contained in the parentheses preceeding e₂ => `left.e2_coefficient*right.Scalar`

I tried using `\((.+?)\) e₂`

however despite it being lazy (non-greedy) the capturing group still contains everything from the first parenthesis in the string to the one immediately before e₂ => `left.e0_coefficient*right.Scalar) e₀ + (left.e1_coefficient*right.Scalar) e₁ + (left.e2_coefficient*right.Scalar`

I think I might have to use a positive-lookbehind or some other form of non-greediness, but I cant figure it out.

### >Solution :

Regex for your case: `\(([^()]+?)\) e₂`

About laziness: Laziness works not like this. Laziness modifier changes behavior of group for which it’s applied, but in your case opening parenthesis is already matched previously.

**Edit:** Word of caution: this regex applies only if you don’t have nested parenthesis. If nested parenthesis possible there are two options:

- You parse whole expression with something like
`\([^()]+?\) e0 + \([^()]+?\) e1 + \(([^()]+?)\) e₂ + \([^()]+?\) e3`

(if possible) - You try to parse expression respecting the balance of parentheses. It is generally not easy or obvious task. (sometimes, depending on regex engine, could be impossible).