Another regex-based solution:
import re
s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
splits = re.findall(r'(\(?[^(]+)', s)
print(splits)
Output:
[' playsound3Dwhenpossible', '(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']
Or if you want to have a generic (or easy to use) function:
split_keep = lambda s, sep : re.findall('({0}?[^{0}]+)'.format(re.escape(sep)), s)
splits = split_keep(s, '(')
This fails in the corner case of having multiple contiguous separators. The following slightly more complex function fixes it:
split_keep = lambda s, sep : re.findall('({0}[^{0}]*|{0}?[^{0}]+)'.format(re.escape(sep)), s)
print(split_keep('((asda((asfasf', '('))
Output:
['(', '(asda', '(', '(asfasf']