Ваша непосредственная проблема в том, что .+
является жадным и поэтому соответствует @s0 else
вместо просто @s0
.Чтобы сделать его нежадным, используйте .+?
вместо:
import re
regex_cond = re.compile(r'.+?(else\s+if|else|if).+')
line2 = '@s0 else if (insreg==1) then (initx,PING,notend) -> sinitx;'
match = regex_cond.match(line2)
print(match.groups())
# ('else if',)
Однако, как и другие предлагали, использование синтаксического анализатора, например Pyparsing , является лучшим способом, чем использование re
здесь.