Question: ```
s = 'blah blah blah... _ABC_superman_is_cool_CBA_ ...blah blah blah...'

```

This is just an example, but I want to match everything between \_ABC\_ and \_CBA\_. So 'superman\_is\_cool'. There may be multiple sections of \_ABC\_...\_CBA\_.

```
re.findall('_ABC_(.*)(?=_CBA_)', s)

```

I tried this first, but obviously doesn't correctly work at all.

Answer: 
I added an additional `_ABC_`, `_CBA_` pair to make sure it finds all the matches:

```
>>> s = 'blah blah blah... _ABC_superman_is_cool_CBA_ ...blah blah _ABC_blah_CBA_...'
>>> re.findall('_ABC_(.*?)_CBA_', s)
['superman_is_cool', 'blah']

```

The `?` makes the `*` operator non-greedy so it finds as short a match as possible. Without it the result would be `['superman_is_cool_CBA_ ...blah blah _ABC_blah']`.
Try this

```
re.findall('_ABC_.*_CBA_)', s)

```