До парена: regex = re.compile("(.*?)\s*\(")
Внутри первого набора паренов: regex = re.compile(".*?\((.*?)\)")
Редактировать: Версия для одного регулярного выражения: regex = re.compile("(.*?)\s*\((.*?)\)")
Пример вывода:
>>> import re
>>> r1 = re.compile("(.*?)\s*\(")
>>> r2 = re.compile(".*?\((.*?)\)")
>>> text = "this is so cool (234)"
>>> m1 = r1.match(text)
>>> m1.group(1)
'this is so cool'
>>> m2 = r2.match(text)
>>> m2.group(1)
'234'
>>> r3 = re.compile("(.*?)\s*\((.*?)\)")
>>> m3 = r3.match(text)
>>> m3.group(1)
'this is so cool'
>>> m3.group(2)
'234'
>>>
Обратите внимание, конечно, что это не будет работать правильно с несколькими наборами скобок, так как он ожидает только один блок текста в скобках (в соответствии с вашим примером). Язык соответствия открывающих / закрывающих паренсов произвольного повторения не является регулярным.